﻿Imports Controle
Imports UtilPadrao
Imports Relatorios

Public Class frmProposta

#Region "Variáveis"
    Private dsProposta As New DataSet
    Private objProposta As New ctrProposta

    Private dICMS As Decimal
    Private iCodProposta As Int32
    Private iRevisao As Int32
    Private dTotalProposta As Decimal

#End Region

#Region "Propriedades"

    Public Property Revisao As Int32

        Get
            Return iRevisao
        End Get

        Set(ByVal value As Int32)
            iRevisao = value
        End Set

    End Property

    Public Property CodProposta As Int32
        Get
            Return iCodProposta
        End Get
        Set(ByVal value As Int32)
            Me.iCodProposta = value
            MyBase.chave = Me.iCodProposta
        End Set
    End Property

    Public codCliente As String

#End Region

#Region "Proposta Geral"

#Region "Métodos"

    Private Sub criarDataSet()

        Try
            dsProposta = Nothing

            dsProposta = objProposta.retornarDataSet

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub carregarProposta()
        Dim objDespesa As New ctrDespesa
        Dim objFormaProposta As New ctrForma
        Dim objProdutoProposta As New ctrProdutoProposta
        Dim objRegiao As New ctrRegioes

        Dim dtbBase As New DataTable
        Dim drProposta As DataRow

        Dim iModalidadeVenda As Int32
        Dim iCondicaoVenda As Int32
        Dim dValorFrete As Decimal
        Dim sCodcotacao As String
        Dim sRevisao As String

        Try
            drProposta = objProposta.retornarPropostaDetalhes(iCodProposta, iRevisao)

            If Not IsNothing(drProposta) Then

                With drProposta
                    sCodcotacao = "0000" & conversao.toInt32(.Item("codProposta"))
                    Me.txtCodCotacao.Text = sCodcotacao.Substring(sCodcotacao.Length - 4, 4)
                    sRevisao = "00" & conversao.toInt32(.Item("revProposta"))
                    Me.Revisao = conversao.toInt32(.Item("revProposta"))
                    Me.txtRevisao.Text = sRevisao.Substring(sRevisao.Length - 2, 2)
                    Me.dtpData.Value = conversao.nuloParaData(.Item("dataProposta"))
                    Me.cboValidade.Text = conversao.toInt32(.Item("diasValidade")).ToString("#0")
                    Me.codCliente = conversao.toInt32(.Item("Cliente"))
                    Me.txtCodCliente.Text = Me.codCliente
                    Me.txtCliente.Text = conversao.nuloParaVazio(.Item("razaoSocial"))
                    Me.txtSolicitacao.Text = conversao.nuloParaVazio(.Item("aosCuidados"))
                    Me.txtReferencia.Text = conversao.nuloParaVazio(.Item("referencia"))

                    iModalidadeVenda = conversao.toInt32(.Item("modalidadeVenda"))
                    If iModalidadeVenda = 0 Then
                        optConsumoProprio.Checked = True
                    Else
                        optIndustrializacao.Checked = True
                    End If

                    iCondicaoVenda = conversao.toInt32(.Item("condicaoVenda"))
                    If iCondicaoVenda = 0 Then
                        optCIP.Checked = True
                    Else
                        optFCA.Checked = True
                    End If

                    chkSemImposto.Checked = conversao.toBoolean(.Item("apresentarSemImposto"))

                    dtpDataEntrega.Value = conversao.nuloParaData(.Item("dataEntrega"))

                    Me.txtCodFrete.Text = conversao.nuloParaVazio(.Item("codFrete"))
                    Me.txtDescItinerario.Text = conversao.nuloParaVazio(.Item("descItinerario"))
                    Me.txtCodExpedicao.Text = conversao.nuloParaVazio(.Item("tipoExp"))
                    Me.txtDescExpedicao.Text = conversao.nuloParaVazio(.Item("tipoVeiculo"))
                    dValorFrete = conversao.toDecimal(.Item("valorFrete"))

                    Me.criarDataSet()

                    'Regiões
                    dtbBase = objRegiao.retornarRegiaoProposta(Me.iCodProposta, Me.iRevisao)
                    If dtbBase.Rows.Count > 0 Then
                        dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Load(dtbBase.CreateDataReader)
                    End If

                    dtbBase = Nothing

                    'Produtos
                    dtbBase = objProdutoProposta.retornarProdutoProposta(Me.iCodProposta, Me.iRevisao)
                    If dtbBase.Rows.Count > 0 Then
                        dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Load(dtbBase.CreateDataReader)
                        For Each drProduto As DataRow In dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Rows
                            Me.atualizarPreco(drProduto.Item(ctrProduto.eColunasProdutos.MARCA),
                                              drProduto.Item(ctrProduto.eColunasProdutos.COD_PRODUTO),
                                              drProduto.Item(ctrProduto.eColunasProdutos.VALOR_MARCA),
                                              drProduto.Item(ctrProduto.eColunasProdutos.CUSTO_MARCA))
                        Next
                    End If
                    dtbBase = Nothing

                    'Fôrma
                    dtbBase = objFormaProposta.retornarFormaProposta(Me.iCodProposta, Me.iRevisao)
                    If dtbBase.Rows.Count > 0 Then
                        dsProposta.Tables(ctrProposta.eTabelas.FORMA).Load(dtbBase.CreateDataReader)
                    End If
                    dtbBase = Nothing

                    'Outras Despesas
                    dtbBase = objDespesa.retornarDespesasProposta(Me.iCodProposta, Me.iRevisao)
                    If dtbBase.Rows.Count > 0 Then
                        dsProposta.Tables(ctrProposta.eTabelas.OUTRAS_DESPESAS).Load(dtbBase.CreateDataReader, LoadOption.Upsert)
                    End If

                    Me.preencherRegiao(0)
                    Me.preencherGridOutrasDespesas()
                    Me.ValorFrete = dValorFrete

                End With
            End If


        Catch ex As Exception
            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

#End Region

#Region "Eventos"

    Private Sub frmProposta_alteraModo(eModoAtual As DSFronteiraPadrao.frmPadraoBanner.eModo) Handles Me.alteraModo
        If eModoAtual = eModo.eAguardando Then
            pnlCabecalhoProposta.Enabled = False
            pnlCabecalhoCliente.Enabled = False

            Me.txtRegiao.Enabled = False

            Me.grpItens.Enabled = False
            Me.dgvForma.Enabled = False
            dgvTerceiros.Enabled = False
            Me.grpTerceiros.Enabled = False
            Me.txtBDIGeral.Enabled = False
            Me.btnAplicarBDI.Enabled = False
            Me.dgvPreco.Enabled = False
            Me.pnlCondicoes.Enabled = False
            Me.grpOutrasDespesas.Enabled = False
            Me.grpFrete.Enabled = False
            Me.grpComissao.Enabled = False
            Me.grpCusto.Enabled = False
            Me.grpEbtida.Enabled = False
        Else
            pnlCabecalhoProposta.Enabled = True
            pnlCabecalhoCliente.Enabled = True
            Me.txtRegiao.Enabled = True
            Me.grpItens.Enabled = True
            Me.dgvForma.Enabled = True
            dgvTerceiros.Enabled = True
            Me.grpTerceiros.Enabled = True
            Me.txtBDIGeral.Enabled = True
            Me.btnAplicarBDI.Enabled = True
            Me.dgvPreco.Enabled = True
            Me.pnlCondicoes.Enabled = True
            Me.grpOutrasDespesas.Enabled = True
            Me.grpFrete.Enabled = True
            Me.grpComissao.Enabled = True
            Me.grpCusto.Enabled = True
            Me.grpEbtida.Enabled = True
        End If
    End Sub

    Private Sub frmProposta_alterar(ByRef bCancel As Boolean) Handles Me.alterar

    End Sub

    Private Sub frmProposta_cancelar(ByRef bCancel As Boolean) Handles Me.cancelar

        Try

            dsProposta = Nothing

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

    Private Sub frmProposta_carregaDados(ByVal iChave As Integer) Handles Me.carregaDados

        Me.carregarProposta()

    End Sub

    Private Sub frmProposta_gravar(ByRef bCancel As Boolean) Handles Me.gravar
        Dim iSegmento As Int32
        Dim iModalidadeVenda As Int32
        Dim iCondicaoVenda As Int32
        bCancel = True

        Try

            iSegmento = CInt(cboSegmento.SelectedValue)

            iModalidadeVenda = IIf(optConsumoProprio.Checked, 0, 1)

            iCondicaoVenda = IIf(optCIP.Checked, 0, 1)

            Me.totalizarProposta(0, 0, 0, 0, 0, 0)

            'If Me.objProposta.validarProposta(Me.codCliente,
            '                                  iSegmento,
            '                                  conversao.toInt32(Me.cboValidade.Text),
            '                                  iCondicaoVenda,
            '                                  "teste",
            '                                    conversao.toDecimal(Me.txtTotalFrete.Text),
            '                                    dtpDataEntrega.Value,
            '                                    0, 0, 0, 0, 0, 0, 0, dsProposta) Then

            Me.objProposta.gravarProposta(Me.CodProposta,
                                         Me.Revisao,
                                         Me.codCliente,
                                         Me.dtpData.Value,
                                         iSegmento,
                                         Me.txtSolicitacao.Text,
                                         conversao.toInt32(Me.cboValidade.Text),
                                         Me.txtReferencia.Text,
                                         iModalidadeVenda,
                                         iCondicaoVenda,
                                         Me.dtpDataEntrega.Value,
                                         Me.chkSemImposto.Checked,
                                         conversao.toDecimal(Me.txtEbtida_Vendas.Text),
                                         conversao.toDecimal(Me.txtEbtida_Adm.Text),
                                         conversao.toDecimal(Me.txtEbtida_Depreciacao.Text),
                                         conversao.toDecimal(Me.txtEvolucaoCusto.Text),
                                         conversao.toDecimal(Me.txtComissao.Text),
                                         Me.CodFrete,
                                         Me.CodItinerario,
                                         conversao.toDecimal(Me.txtValorFrete.Text),
                                         Me.dICMS,
                                         objImposto.Perc_PIS_COFINS,
                                         ctrProposta.eStatus.EmAnalise,
                                         ctrProposta.eTipoMercado.MercadoInterno,
                                         Me.dTotalProposta,
                                         dsProposta)

            Me.Revisao = objProposta.RevProposta
            Me.CodProposta = objProposta.CodProposta

            bCancel = False
            'Else
            '    Dim frmLog As New frmLogProposta
            '    frmLog.Log = objProposta.retornaMensagensValidacao
            '    frmLog.ShowDialog()
            'End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try
    End Sub

    Private Sub frmProposta_inserir(ByRef bCancel As Boolean) Handles Me.inserir

        dtpValidade.MinDate = dtpData.Value
        dtpDataEntrega.MinDate = dtpData.Value
        Me.criarDataSet()
        Me.preencherGridOutrasDespesas()

    End Sub

    Private Sub frmProposta_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        Me.modoAtual = eModo.eAguardando

        'Segmento
        Me.carregarCboSegmentos()

        'Região
        Me.configurarGridRegiao()

        'Produtos->Refratários->Itens
        Me.configurarGridItens()

        'Produtos->Refratários->Itens->Fôrmas
        Me.configurarGridForma()

        'Produtos->Refratários->Terceiros
        Me.configurarGridTerceiros()
        Me.cboUnidade.Items.AddRange(objTerceiros.sUnidades)

        'Preços
        Me.configurarGridPreco()

        'Outras Despesas
        Me.configurarGridOutrasDespesas()

        'Proposta
        Me.configurarGridProposta()

        'Resultado
        Me.configurarGridCustos()
        Me.configurarGridDespesas()
        Me.configurarGridReceitaBruta()
        Me.configurarGridResultado()

        'Carregar a proposta caso tenha alguma selecionada
        If Me.iCodProposta > 0 Then
            Me.carregarProposta()
        End If

    End Sub

#End Region

#End Region

#Region "Cabeçalho"

#Region "Variáveis"

    Private objCliente As New ctrCliente

#End Region

#Region "Métodos Privados"

    Private Sub carregarCboSegmentos()
        Dim dtbSegmentos As New DataTable
        Dim objSegmento As New ctrSegmento

        Try
            dtbSegmentos = objSegmento.retornarSegmentos(0, 0)

            With cboSegmento
                .Items.Clear()
                .DataSource = dtbSegmentos
                .DisplayMember = "segmento"
                .ValueMember = "codSegmento"
            End With

        Catch ex As Exception
            MessageBox.Show(ex.Message, Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

    End Sub

    Private Sub pesquisarCliente()
        Dim sSql As String
        Dim frmDialogo As New frmPesquisa
        Dim sCodCliente As String = ""

        Try
            sSql = Me.objCliente.sqlConsulta

            With frmDialogo
                .Sql = sSql
                .Titulo = "Pesquisar Cliente"
                .CarregaTela()
                If .DS.Tables(0).Rows.Count > 0 Then
                    .ShowDialog()
                    If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                        Me.codCliente = Persistencia.Conversao.ToString(.ID)
                        preencherCliente(Me.codCliente)
                    End If
                Else
                    MsgBox("Registro não encontrado", MsgBoxStyle.Exclamation, Me.Text)
                    Exit Sub
                End If
            End With
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub preencherCliente(ByVal sCodCliente As String)
        Dim dtbCliente As New DataTable

        Try

            Me.dICMS = 0

            If sCodCliente.Trim <> String.Empty Then

                dtbCliente = objCliente.selecionarCliente(sCodCliente)

                If Not dtbCliente Is Nothing Then
                    txtCodCliente.Text = sCodCliente
                    txtCliente.Text = conversao.nuloParaVazio(dtbCliente.Rows(0).Item("razaoSocial")).ToString.ToUpper
                    Me.dICMS = Me.objImposto.retornarICMSCliente(sCodCliente)
                Else
                    MsgBox("Código não existente.", MsgBoxStyle.Exclamation, Application.ProductName)
                    txtCodCliente.Text = ""
                    txtCliente.Text = ""
                End If

            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)
        End Try

    End Sub

#End Region

#Region "Eventos"

    Private Sub btnSelecionarCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSelecionarCliente.Click

        Me.pesquisarCliente()

    End Sub

    Private Sub txtCodCliente_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCodCliente.Leave
        Try
            Me.preencherCliente(Me.txtCodCliente.Text.Trim)

        Catch ex As Exception

        End Try
    End Sub

    ''' <summary>
    ''' Calcula a validade da proposta de acordo com o número de dias informado 
    ''' </summary>
    ''' 
    Private Sub cboValidade_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboValidade.LostFocus

        Try

            If conversao.toInteger(cboValidade.Text) < 0 Then
                cboValidade.Text = 1
            End If
            cboValidade.Text = conversao.toInt32(cboValidade.Text)
            dtpValidade.Value = dtpData.Value.Date.AddDays(conversao.toInt32(cboValidade.Text))

        Catch ex As Exception

            MessageBox.Show(ex.Message)

        End Try

    End Sub

    Private Sub dtpData_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles dtpData.ValueChanged

        Try

            dtpValidade.MinDate = dtpData.Value
            dtpDataEntrega.MinDate = dtpData.Value

            dtpValidade.Value = dtpData.Value.Date.AddDays(conversao.toInt32(cboValidade.Text))

        Catch ex As Exception

            MessageBox.Show(ex.Message)

        End Try


    End Sub

#End Region

#End Region

#Region "Regiões"

#Region "Variáveis"

    Private iRegiaoProposta As Int32

#End Region

#Region "Propriedades"

    Public Property RegiaoProposta As Int32

        Get
            Return iRegiaoProposta
        End Get

        Set(ByVal value As Int32)
            iRegiaoProposta = value
            If iRegiaoProposta > 0 Then
                preencherGridProduto()
                preencherGridTerceiros()
                preencherGridForma()
            End If
        End Set

    End Property

#End Region

#Region "Enumerações"

    Private Enum eRegioes
        codRegiao = 0
        descrição = 1
        comentario = 2
    End Enum

#End Region

#Region "Métodos privados"

    Private Function gravarRegiao(ByVal iCodRegiao As Int32, ByVal sRegiao As String) As Boolean
        Dim drRegiao As DataRow() = Nothing
        Dim drLinha As DataRow
        Dim bRetorno As Boolean = False

        Try
            If iCodRegiao > 0 Then
                drRegiao = dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Select("Regiao='" & sRegiao.Trim & "' AND CodRegiao<>" & iCodRegiao)
            Else
                drRegiao = dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Select("Regiao='" & sRegiao.Trim & "'")
            End If
            If drRegiao.Length > 0 Then
                MessageBox.Show("Região já incluída na proposta.", Me.Text, MessageBoxButtons.OK)
            Else
                If iCodRegiao > 0 Then
                    drRegiao = dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Select("CodRegiao=" & iCodRegiao)
                    drLinha = drRegiao(0)
                    drLinha.BeginEdit()
                Else
                    drLinha = dsProposta.Tables(ctrProposta.eTabelas.REGIAO).NewRow
                    Me.RegiaoProposta = dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Rows.Count + 1
                    drLinha.Item(ctrRegioes.eColunasTabela.COD_REGIAO) = iRegiaoProposta
                End If

                drLinha.Item(ctrRegioes.eColunasTabela.DESC_REGIAO) = sRegiao.Trim

                If iCodRegiao > 0 Then
                    drLinha.EndEdit()
                Else
                    dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Rows.Add(drLinha)
                End If
                bRetorno = True
            End If

            Me.preencherRegiao(0)

            Return bRetorno

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Function

    Private Sub excluirRegiao(ByVal iCodRegiao As Int32)

        Dim drRegiao As DataRow() = Nothing

        Try
            If MessageBox.Show("Excluindo a região selecionada, todos os itens, " &
                               "produtos de terceiros e fôrmas relacionados a mesma " &
                               "serão excluídos da proposta. Deseja continuar?", Me.Text, MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
                If iCodRegiao > 0 Then
                    drRegiao = dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Select("CodRegiao=" & iCodRegiao)

                    For i As Int32 = 0 To drRegiao.Length - 1
                        drRegiao(i).Delete()
                    Next
                End If
            End If

            Me.preencherRegiao(0)

            If dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Rows.Count > 0 Then
                Me.RegiaoProposta = 1
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub configurarGridRegiao()

        With Me.dgvRegioes
            .DataSource = Nothing
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToResizeColumns = False
            .AllowUserToResizeRows = False
            .Columns.Clear()

            Dim colCodRegiao As New DataGridViewTextBoxColumn()
            With colCodRegiao
                .HeaderText = ""
                .DataPropertyName = "codRegiao"
                .Width = 20
                .Frozen = True
                .ReadOnly = True
                .Visible = False
                .ValueType = System.Type.GetType("System.Integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colCodRegiao)

            Dim colDescricao As New DataGridViewTextBoxColumn()
            With colDescricao
                .HeaderText = "Descricao"
                .DataPropertyName = "regiao"
                .Width = 110
                .ReadOnly = True
                .Visible = True
                .ValueType = System.Type.GetType("System.String")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colDescricao)

        End With

    End Sub

    Private Sub preencherRegiao(ByVal iCodRegiao As Int32)

        Try

            With dgvRegioes
                '.Rows.Clear()
                .DataSource = dsProposta.Tables(ctrProposta.eTabelas.REGIAO)
                If dgvRegioes.SelectedRows.Count > 0 Then
                    Me.RegiaoProposta = .SelectedRows(0).Cells(eRegioes.codRegiao).Value
                End If
            End With

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

#End Region

#Region "Eventos"

    Private Sub btnIncluirRegiao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnIncluirRegiao.Click
        If txtRegiao.Text <> String.Empty Then
            If Me.gravarRegiao(Me.txtRegiao.Tag, txtRegiao.Text.Trim) Then
                txtRegiao.Text = String.Empty
                Me.txtRegiao.Tag = Nothing
                Me.btnIncluirRegiao.Image = My.Resources.Document_
                Me.btnIncluirRegiao.Enabled = False
                Me.btnExcluirRegiao.Enabled = False
            End If
        End If

    End Sub

    Private Sub dgvRegioes_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvRegioes.CellClick

        Try
            If e.RowIndex >= 0 Then
                Me.RegiaoProposta = conversao.toInt32(dgvRegioes.Item(eRegioes.codRegiao, e.RowIndex).Value)
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub dgvRegioes_CellDoubleClick1(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvRegioes.CellDoubleClick
        Dim sRegiao As String = ""

        Try
            If e.RowIndex >= 0 Then
                Me.RegiaoProposta = conversao.toInt32(dgvRegioes.Item(eRegioes.codRegiao, e.RowIndex).Value)
                If Me.RegiaoProposta > 0 Then
                    Me.txtRegiao.Tag = Me.RegiaoProposta
                    Me.txtRegiao.Text = conversao.nuloParaVazio(dgvRegioes.Item(eRegioes.descrição, e.RowIndex).Value)
                    btnIncluirRegiao.Image = My.Resources.DocumentEdit
                    Me.btnExcluirRegiao.Enabled = True
                    Me.btnIncluirRegiao.Enabled = True

                End If
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub btnExcluirRegiao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExcluirRegiao.Click
        Dim iCodRegiao As Int32

        Try
            iCodRegiao = Conversao.nuloParaZero(dgvRegioes.Item(eRegioes.codRegiao, dgvRegioes.CurrentRow.Index).Value)
            Me.excluirRegiao(iCodRegiao)

            Me.txtRegiao.Text = String.Empty
            Me.txtRegiao.Tag = Nothing

            Me.btnIncluirRegiao.Image = My.Resources.Document_
            Me.btnIncluirRegiao.Enabled = False
            Me.btnExcluirRegiao.Enabled = False

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

    Private Sub txtRegiao_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtRegiao.KeyDown

        btnIncluirRegiao.Enabled = Not String.IsNullOrEmpty(txtRegiao.Text)

    End Sub

    Private Sub txtRegiao_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtRegiao.KeyPress

        btnIncluirRegiao.Enabled = Not String.IsNullOrEmpty(txtRegiao.Text)

    End Sub

#End Region

#End Region

#Region "Produtos->Refratários"

#Region "Enumerações"

    Private Enum eAcaoItens
        Inserir = 0
        Editar = 1
        Excluir = 2
    End Enum

#End Region

#Region "Produtos->Refratários->Itens"

#Region "Variáveis"

    Private objProduto As New ctrProduto
    Private iAcaoProdutoAtual As eAcaoItens
    Private alValidacaoProduto As New ArrayList(0)

#End Region

#Region "Enumerações"



#End Region

#Region "Itens"

#Region "Métodos privados"

    Private Sub configurarGridItens()

        With dgvItens
            .DataSource = Nothing
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToResizeColumns = False
            .AllowUserToResizeRows = False
            .Columns.Clear()

            Dim colCodRegiao As New DataGridViewTextBoxColumn()
            With colCodRegiao
                .HeaderText = ""
                .DataPropertyName = "codRegiao"
                .Width = 40
                .Frozen = True
                .ReadOnly = True
                .FillWeight = 40
                .Visible = False
                .ValueType = System.Type.GetType("System.Integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colCodRegiao)

            Dim colRegiao As New DataGridViewTextBoxColumn()
            With colRegiao
                .HeaderText = ""
                .DataPropertyName = "Regiao"
                .Width = 40
                .Frozen = True
                .ReadOnly = True
                .FillWeight = 40
                .Visible = False
                .ValueType = System.Type.GetType("System.Integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colRegiao)

            Dim colItem As New DataGridViewTextBoxColumn()
            With colItem
                .HeaderText = ""
                .DataPropertyName = "item"
                .Width = 20
                .Frozen = True
                .ReadOnly = True
                .Visible = False
                .ValueType = System.Type.GetType("System.Integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colItem)

            Dim colCodigo As New DataGridViewTextBoxColumn()
            With colCodigo
                .HeaderText = "Código"
                .DataPropertyName = "codProduto"
                .Width = 60
                .Frozen = True
                .ReadOnly = False
                .Visible = True
                .ValueType = System.Type.GetType("System.integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colCodigo)

            Dim colProduto As New DataGridViewTextBoxColumn()
            With colProduto
                .HeaderText = "Produto"
                .DataPropertyName = "descProduto"
                .Width = 260
                .Frozen = True
                .ReadOnly = True
                .Visible = True
                .ValueType = System.Type.GetType("System.String")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colProduto)

            Dim colForma As New DataGridViewCheckBoxColumn()
            With colForma
                .HeaderText = "Fôrma"
                .DataPropertyName = "forma"
                .Width = 40
                .Frozen = False
                .ReadOnly = True
                .Visible = True
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colForma)

            Dim colQuantidade As New DataGridViewTextBoxColumn()
            With colQuantidade
                .HeaderText = "Quant."
                .DataPropertyName = "quantidade"
                .Width = 70
                .Frozen = False
                .ReadOnly = True
                .Visible = True
                .ValueType = System.Type.GetType("System.Integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colQuantidade)

            Dim colUnidade As New DataGridViewTextBoxColumn()
            With colUnidade
                .HeaderText = "Unid."
                .DataPropertyName = "unidade"
                .Width = 35
                .Frozen = False
                .ReadOnly = True
                .Visible = True
                .ValueType = System.Type.GetType("System.String")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colUnidade)

            Dim colPeso As New DataGridViewTextBoxColumn()
            With colPeso
                .HeaderText = "Peso"
                .DataPropertyName = "pesoBrutoUnitario"
                .Width = 60
                .Frozen = False
                .ReadOnly = True
                .Visible = True
                .ValueType = System.Type.GetType("System.double")
                .ToolTipText = "Peso unitário em Kg"
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPeso)

            Dim colPesoTotal As New DataGridViewTextBoxColumn()
            With colPesoTotal
                .HeaderText = "Peso Total"
                .DataPropertyName = "pesoTotal"
                .Width = 90
                .Frozen = False
                .ReadOnly = True
                .Visible = True
                .ValueType = System.Type.GetType("System.double")
                .ToolTipText = "Peso total em TN"
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPesoTotal)

            Dim colNCM As New DataGridViewTextBoxColumn()
            With colNCM
                .HeaderText = "NCM"
                .DataPropertyName = "ncm"
                .Width = 120
                .Frozen = False
                .ReadOnly = True
                .Visible = True
                .ValueType = System.Type.GetType("System.String")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colNCM)

            Dim colFaturamento As New DataGridViewTextBoxColumn()
            With colFaturamento
                .HeaderText = "Faturamento"
                .DataPropertyName = "faturamento"
                .Width = 120
                .Frozen = False
                .ReadOnly = False
                .Visible = True
                .ValueType = System.Type.GetType("System.String")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colFaturamento)

            Dim colIPI As New DataGridViewTextBoxColumn()
            With colIPI
                .HeaderText = "IPI"
                .DataPropertyName = "ipi"
                .Width = 30
                .Frozen = False
                .ReadOnly = False
                .Visible = True
                .ValueType = System.Type.GetType("System.String")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colIPI)

            Dim colMarca As New DataGridViewTextBoxColumn()
            With colMarca
                .HeaderText = "Marca"
                .DataPropertyName = "marca"
                .Width = 260
                .Frozen = False
                .ReadOnly = False
                .Visible = True
                .ValueType = System.Type.GetType("System.String")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colMarca)

            .Rows.Clear()
            .Refresh()

        End With

    End Sub

    Private Sub preencherProduto(ByVal iAcaoItem As eAcaoItens, ByVal drProduto As DataRow, ByVal sCodProduto As String)

        Try

            iAcaoProdutoAtual = iAcaoItem

            If Not drProduto Is Nothing Then
                With drProduto
                    Me.txtCodProduto.Text = conversao.nuloParaZero(.Item("codProduto"))
                    Me.txtProduto.Tag = IIf(sCodProduto.Trim <> String.Empty, sCodProduto.Trim, txtCodProduto.Text)
                    Me.txtProduto.Text = conversao.nuloParaVazio(.Item("descProduto"))
                    Me.txtMarca.Text = conversao.nuloParaVazio(.Item("descMarca"))
                    Me.txtFaturamento.Text = conversao.nuloParaVazio(.Item("cnpj"))
                    Me.txtNCM.Text = conversao.nuloParaVazio(.Item("ncm"))
                    Me.txtIPI.Text = conversao.toInt32(.Item("ipi"))
                    Me.txtPeso.Text = Formatacao.formatPeso(conversao.toDecimal(.Item("pesoBrutoUnitario")), 3)
                    Me.txtUnidade.Text = conversao.nuloParaVazio(.Item("unidade"))
                    Me.txtRoyalties.Text = Formatacao.formatValor(conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.ROYALTIES)))
                    If iAcaoItem = eAcaoItens.Editar Then
                        Me.txtCodProduto.Enabled = False
                        Me.btnProduto.Enabled = False
                        Me.txtQuantidade.Text = conversao.vazioParaZero(.Item("Quantidade"))
                        Me.txtPesoTotal.Text = Formatacao.formatPeso(conversao.vazioParaZero(.Item(ctrProduto.eColunasProdutos.PESO_TOTAL)), 3)
                        chkForma.Checked = conversao.toBoolean(.Item("Forma"))
                    End If
                    If Me.objProduto.retornaUnidadeCalculo(Me.txtUnidade.Text) = ctrProduto.eUnidadeCalculo.POR_PECA Then
                        chkForma.Enabled = True
                        lblUnidadeQuantidade.Text = "PÇ"
                    Else
                        chkForma.Enabled = False
                        lblUnidadeQuantidade.Text = "TN"
                    End If

                End With

                Me.btnLimparProduto.Enabled = True
                Me.btnGravarProduto.Enabled = True
                If iAcaoItem = eAcaoItens.Editar Then
                    Me.btnGravarProduto.Image = My.Resources.DocumentEdit
                    Me.btnRemoverProduto.Enabled = (sCodProduto = txtCodProduto.Text)
                Else
                    Me.btnGravarProduto.Image = My.Resources.Document_
                End If
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub preencherGridProduto()
        Dim datProdutosRegiao As New DataTable
        Dim drProdutosRegiao As DataRow()
        Try

            drProdutosRegiao = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("codRegiao=" & iRegiaoProposta)
            If drProdutosRegiao.Length > 0 Then
                datProdutosRegiao = drProdutosRegiao.CopyToDataTable

            End If

            With dgvItens
                .DataSource = datProdutosRegiao
                .Refresh()
            End With

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try


    End Sub

    Private Sub pesquisarProduto(ByVal sCodProduto As String)
        Dim sSql As String
        Dim frmDialogo As New frmPesquisa
        Dim datProduto As New DataTable

        Try
            If Me.RegiaoProposta > 0 Then
                If sCodProduto = String.Empty Then
                    sSql = Me.objProduto.sqlConsulta(ctrProduto.tipoProduto.Magnesita)

                    With frmDialogo
                        .Sql = sSql
                        .Titulo = "Pesquisar Produto"
                        .CarregaTela()
                        If .DS.Tables(0).Rows.Count > 0 Then
                            .ShowDialog()
                            If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                                sCodProduto = Persistencia.Conversao.ToString(.ID)
                            End If
                        Else
                            MsgBox("Não existem produtos cadastrados.", MsgBoxStyle.Exclamation, Me.Text)
                            Exit Sub
                        End If

                    End With
                End If

                If sCodProduto <> String.Empty Then

                    datProduto = Me.objProduto.selecionarProduto(sCodProduto)
                    If Not datProduto Is Nothing Then
                        Me.preencherProduto(iAcaoProdutoAtual, datProduto.Rows(0), "")
                    Else
                        MessageBox.Show("Produto não encontrado.",
                                        Me.Text,
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Exclamation)

                    End If
                End If
            Else
                MessageBox.Show("Informe a região para inserir o produto.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Function gravarProduto(ByVal iAcaoProduto As eAcaoItens,
                                  ByVal iCodRegiao As Int32,
                                  ByVal sCodProdutoAnt As String,
                                  ByVal sCodProduto As String,
                                  ByVal sProduto As String,
                                  ByVal bForma As Boolean,
                                  ByVal dQuantidade As Double,
                                  ByVal sUnidade As String,
                                  ByVal dPeso As Double,
                                  ByVal sNCM As String,
                                  ByVal sFaturamento As String,
                                  ByVal dIPI As Double,
                                  ByVal sMarca As String,
                                  ByVal dValorMarca As Decimal,
                                  ByVal dRoyalties As Double,
                                  ByVal dCusto As Decimal,
                                  ByVal dValorUnitario As Decimal,
                                  ByVal dValorRoyalties As Decimal,
                                  ByVal dValorFrete As Decimal,
                                  ByVal dValorForma As Decimal,
                                  ByVal dValorIPI As Decimal,
                                  ByVal dValorICMS As Decimal,
                                  ByVal dValorPisCofins As Decimal) As Boolean

        Dim drProdutos As DataRow()
        Dim drProduto As DataRow = Nothing
        Dim dPesoTonel As Double = 0
        Dim dPesoTotal As Double = 0
        Dim bRetorno As Double = False

        Try
            Me.limparErrosProduto()
            If Me.validarInsercaoProduto(iAcaoProduto, iCodRegiao, sCodProduto, dQuantidade) Then

                If sCodProduto <> sCodProdutoAnt Then
                    'Valida se o produto informado já existe naquela região
                    drProdutos = dsProposta.Tables("Produtos").Select("CodProduto = '" & sCodProduto & "' And codRegiao=" & iCodRegiao)
                    If drProdutos.Length > 0 And iAcaoProduto <> eAcaoItens.Excluir Then
                        MessageBox.Show("Produto já existente nesta região. " & Environment.NewLine &
                                        "Verifique",
                                        Application.ProductName,
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Exclamation)
                        Exit Function
                    End If
                End If

                Select Case iAcaoProduto

                    Case eAcaoItens.Inserir
                        drProduto = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).NewRow

                    Case eAcaoItens.Editar
                        drProdutos = dsProposta.Tables("Produtos").Select("codRegiao =" & iCodRegiao & " and codProduto='" & sCodProdutoAnt & "'")
                        If drProdutos.Length = 1 Then
                            drProduto = drProdutos(0)
                            drProduto.BeginEdit()
                        Else
                            MessageBox.Show("Produto não identificado. Alteração cancelada. " & Environment.NewLine &
                                       "Verifique",
                                       Application.ProductName,
                                       MessageBoxButtons.OK,
                                       MessageBoxIcon.Exclamation)
                        End If
                    Case eAcaoItens.Excluir
                        drProdutos = dsProposta.Tables("Produtos").Select("codRegiao =" & iCodRegiao & " and codProduto='" & sCodProduto & "'")
                        If MessageBox.Show("Tem certeza que deseja excluir este item?",
                                           Application.ProductName,
                                           MessageBoxButtons.YesNo,
                                           MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                            For i As Int32 = 0 To drProdutos.Length - 1
                                drProdutos(i).Delete()
                            Next
                            dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).AcceptChanges()
                        End If

                        Return True

                        Exit Function

                End Select

                With drProduto
                    .Item(ctrProduto.eColunasProdutos.COD_REGIAO) = iCodRegiao
                    .Item(ctrProduto.eColunasProdutos.COD_PRODUTO) = sCodProduto
                    .Item(ctrProduto.eColunasProdutos.PRODUTO) = sProduto
                    .Item(ctrProduto.eColunasProdutos.FORMA) = bForma
                    .Item(ctrProduto.eColunasProdutos.QUANTIDADE) = dQuantidade
                    .Item(ctrProduto.eColunasProdutos.UNIDADE) = sUnidade
                    .Item(ctrProduto.eColunasProdutos.PESO) = dPeso
                    dPesoTotal = Me.objProduto.calcularPesoTotal(dQuantidade, dPeso, sUnidade)
                    .Item(ctrProduto.eColunasProdutos.PESO_TOTAL) = dPesoTotal
                    .Item(ctrProduto.eColunasProdutos.NCM) = sNCM
                    .Item(ctrProduto.eColunasProdutos.FATURAMENTO) = sFaturamento
                    .Item(ctrProduto.eColunasProdutos.IPI) = dIPI
                    .Item(ctrProduto.eColunasProdutos.MARCA) = sMarca
                    If dValorMarca >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_MARCA) = conversao.nuloParaZero(dValorMarca)
                    End If
                    If dCusto >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.CUSTO_MARCA) = conversao.nuloParaZero(dCusto)
                    End If

                    If dRoyalties >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.ROYALTIES) = dRoyalties
                    End If
                    If dValorUnitario >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_UNITARIO) = dValorUnitario
                    End If
                    If dValorRoyalties >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_ROYALTIES) = dValorRoyalties
                    End If
                    If dValorFrete >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_FRETE) = dValorFrete
                    End If
                    If dValorForma >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_FORMA) = dValorForma
                    End If
                    If dValorIPI >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_IPI) = dValorIPI
                    End If
                    If dValorICMS >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_ICMS) = dValorICMS
                    End If
                    If dValorPisCofins >= 0 Then
                        .Item(ctrProduto.eColunasProdutos.VALOR_PIS_COFINS) = dValorPisCofins
                    End If

                End With

                If iAcaoProduto = eAcaoItens.Inserir Then
                    dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Rows.Add(drProduto)
                ElseIf iAcaoProduto = eAcaoItens.Excluir Then
                    drProduto.EndEdit()
                End If

                If bForma Then
                    Me.gravarForma(iAcaoProduto, iCodRegiao, sCodProduto, sProduto, "", dValorForma, False)
                Else
                    Me.gravarForma(eAcaoItens.Excluir, iCodRegiao, sCodProduto, sProduto, "", dValorForma, False)
                End If

                bRetorno = True

            End If

            Return bRetorno

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        Finally
            Me.atualizarValoresFrete()
        End Try

    End Function

    Private Function validarInsercaoProduto(ByVal iAcaoItens As eAcaoItens, ByVal iCodRegiao As Int32, ByVal sCodProduto As String, ByVal dQuantidade As Double) As Boolean
        Dim bRetorno As Boolean = False
        Try

            Dim iContadorMensagens As Int32
            Dim sMensagem As String

            If iAcaoItens <> eAcaoItens.Excluir Then
                If Not objProduto.validaInclusaoProdutoProposta(iCodRegiao, sCodProduto, dQuantidade) Then

                    alValidacaoProduto = objProduto.retornaMensagensValidacao

                    For iContadorMensagens = 0 To alValidacaoProduto(DSFronteiraPadrao.frmPadrao.eMensagem.Codigo).Count - 1

                        sMensagem = alValidacaoProduto(DSFronteiraPadrao.frmPadrao.eMensagem.Mensagem).item(iContadorMensagens)

                        Select Case alValidacaoProduto(DSFronteiraPadrao.frmPadrao.eMensagem.Codigo).item(iContadorMensagens)
                            Case ctrProduto.eValidaInclusaoProduto.COD_PRODUTO_INVALIDO
                                Me.epPadrao.SetError(Me.txtCodProduto, sMensagem)
                            Case ctrProduto.eValidaInclusaoProduto.QUANTIDADE_INVALIDA
                                Me.epPadrao.SetError(Me.txtQuantidade, sMensagem)
                            Case ctrProduto.eValidaInclusaoProduto.COD_REGIAO_OBRIGATORIO
                                MessageBox.Show("Selecione a região para inclusão do item.",
                                                Application.ProductName,
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Exclamation)
                                Me.dgvRegioes.Focus()
                        End Select

                    Next
                Else
                    bRetorno = True
                End If
            Else
                bRetorno = True
            End If

            Return bRetorno

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Function

    Private Sub limparErrosProduto()

        Me.epPadrao.SetError(txtQuantidade, "")
        Me.epPadrao.SetError(txtCodProduto, "")

    End Sub

    Private Sub limparProduto()

        Try

            Me.limpaCampos(grpProduto)
            Me.txtProduto.Tag = String.Empty

            Me.iAcaoProdutoAtual = eAcaoItens.Inserir

            Me.btnGravarProduto.Image = My.Resources.Document_
            Me.btnGravarProduto.Enabled = False
            Me.btnRemoverProduto.Enabled = False
            Me.btnLimparProduto.Enabled = False

            btnProduto.Enabled = True
            Me.txtCodProduto.Enabled = True

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Sub

    Private Function retornarPesoTotalProposta() As Double
        Dim dPesoTotal As Double = 0

        Try

            For Each drLinha As DataRow In dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Rows
                dPesoTotal += conversao.toDecimal(drLinha.Item(ctrProduto.eColunasProdutos.PESO_TOTAL))
            Next

            Return dPesoTotal

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try
    End Function

#End Region

#Region "Eventos"

    Private Sub btnGravarProduto_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGravarProduto.Click

        Try

            If Me.gravarProduto(iAcaoProdutoAtual,
                             Me.iRegiaoProposta,
                             Me.txtProduto.Tag,
                             Me.txtCodProduto.Text.Trim,
                             Me.txtProduto.Text.Trim,
                             Me.chkForma.Checked,
                             conversao.toDecimal(Me.txtQuantidade.Text),
                             Me.txtUnidade.Text,
                             conversao.toDecimal(Me.txtPeso.Text),
                             Me.txtNCM.Text,
                             Me.txtFaturamento.Text,
                             conversao.toDecimal(Me.txtIPI.Text),
                             Me.txtMarca.Text,
                             -1, conversao.toDecimal(Me.txtRoyalties.Text), -1, -1, -1, -1, -1, -1, -1, -1) Then

                Me.preencherGridProduto()

                Me.limparProduto()

            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub btnProduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProduto.Click

        Me.pesquisarProduto(String.Empty)

    End Sub

    Private Sub txtCodProduto_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtCodProduto.Leave

        If Me.txtCodProduto.Text <> String.Empty Then
            Me.pesquisarProduto(txtCodProduto.Text.Trim)
        End If

    End Sub

    Private Sub txtQuantidade_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtQuantidade.Leave

        Try

            Me.txtQuantidade.Text = conversao.toDecimal(Me.txtQuantidade.Text)
            Me.txtPesoTotal.Text = Formatacao.formatPeso(Me.objProduto.calcularPesoTotal(conversao.toDecimal(Me.txtQuantidade.Text),
                                                        conversao.toDecimal(Me.txtPeso.Text),
                                                        conversao.nuloParaVazio(Me.txtUnidade.Text)), 3)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub dgvItens_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvItens.CellClick
        Dim drProduto As DataRow()
        Dim sCodProduto As String
        Dim iCodRegiao As Int32

        Try
            If e.RowIndex >= 0 Then
                sCodProduto = conversao.nuloParaVazio(dgvItens.Item(ctrProduto.eColunasProdutos.COD_PRODUTO, e.RowIndex).Value)
                iCodRegiao = conversao.vazioParaZero(dgvItens.Item(ctrProduto.eColunasProdutos.COD_REGIAO, e.RowIndex).Value)

                drProduto = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("CodProduto = '" & sCodProduto & "' And codRegiao=" & iCodRegiao)
                If drProduto.Length = 1 Then
                    preencherProduto(eAcaoItens.Editar, drProduto(0), sCodProduto)
                End If

            End If
        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub btnLimparTerceiros_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnLimparTerceiros.Click
        Me.limparTerceiros()
    End Sub

    Private Sub btnRemoverProduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoverProduto.Click
        Try

            If Me.gravarProduto(eAcaoItens.Excluir,
                             Me.iRegiaoProposta,
                             Me.txtProduto.Tag,
                             Me.txtCodProduto.Text.Trim,
                             Me.txtProduto.Text.Trim,
                             Me.chkForma.Checked,
                             conversao.toDecimal(Me.txtQuantidade.Text),
                             Me.txtUnidade.Text,
                             conversao.toDecimal(Me.txtPeso.Text),
                             Me.txtNCM.Text,
                             Me.txtFaturamento.Text,
                             conversao.toDecimal(Me.txtIPI.Text),
                             Me.txtMarca.Text,
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0) Then

                Me.preencherGridProduto()

                Me.limparProduto()

            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Sub

#End Region

#End Region

#Region "Fôrmas"

#Region "Variáveis"
    Private objForma As New ctrForma
#End Region

#Region "Métodos privados"

    Private Sub gravarForma(ByVal iAcaoForma As eAcaoItens,
                            ByVal iCodRegiao As Int32,
                            ByVal sCodProduto As String,
                            ByVal sProduto As String,
                            ByVal sForma As String,
                            ByVal dValorForma As Decimal,
                            ByVal bDiluir As Boolean)

        Dim drFormas As DataRow()
        Dim drForma As DataRow = Nothing

        Try

            drFormas = dsProposta.Tables(ctrProposta.eTabelas.FORMA).Select("codRegiao=" & iCodRegiao & " AND codProduto='" & sCodProduto & "'")

            Select Case iAcaoForma
                Case eAcaoItens.Inserir
                    drForma = dsProposta.Tables(ctrProposta.eTabelas.FORMA).NewRow

                Case eAcaoItens.Editar
                    If drFormas.Length > 0 Then
                        drForma = drFormas(0)
                        drForma.BeginEdit()
                    Else
                        drForma = dsProposta.Tables(ctrProposta.eTabelas.FORMA).NewRow
                        iAcaoForma = eAcaoItens.Inserir
                    End If


                Case eAcaoItens.Excluir
                    For i As Int32 = 0 To drFormas.Length - 1
                        drFormas(i).Delete()
                    Next
                    Exit Sub
            End Select

            drForma.Item(ctrForma.eColunasForma.COD_REGIAO) = iCodRegiao
            drForma.Item(ctrForma.eColunasForma.COD_PRODUTO) = sCodProduto.Trim
            drForma.Item(ctrForma.eColunasForma.PRODUTO) = sProduto.Trim
            drForma.Item(ctrForma.eColunasForma.FORMA) = sForma.Trim
            drForma.Item(ctrForma.eColunasForma.VALOR_FORMA) = dValorForma
            drForma.Item(ctrForma.eColunasForma.DILUIR) = bDiluir

            If iAcaoForma = eAcaoItens.Inserir Then
                dsProposta.Tables(ctrProposta.eTabelas.FORMA).Rows.Add(drForma)
            Else
                drForma.AcceptChanges()
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        Finally

            ' Me.preencherGridForma()


        End Try

    End Sub

    Private Sub configurarGridForma()
        Try

            With dgvForma
                .DataSource = Nothing
                .AutoGenerateColumns = False
                .AllowUserToAddRows = False
                .AllowUserToResizeColumns = False
                .AllowUserToResizeRows = False
                .ScrollBars = ScrollBars.Both
                .Columns.Clear()

                Dim colCodRegiao As New DataGridViewTextBoxColumn()
                With colCodRegiao
                    .HeaderText = "CodRegiao"
                    .DataPropertyName = "codRegiao"
                    .Width = 60
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = False
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colCodRegiao)

                Dim colCodProduto As New DataGridViewTextBoxColumn()
                With colCodProduto
                    .HeaderText = "Código"
                    .DataPropertyName = "codProduto"
                    .Width = 60
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colCodProduto)

                Dim colProduto As New DataGridViewTextBoxColumn()
                With colProduto
                    .HeaderText = "Produto"
                    .DataPropertyName = "produto"
                    .Width = 250
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colProduto)

                Dim colForma As New DataGridViewTextBoxColumn()
                With colForma
                    .HeaderText = "Fôrma"
                    .DataPropertyName = "forma"
                    .Width = 250
                    .Frozen = True
                    .ReadOnly = False
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colForma)

                Dim colValorForma As New DataGridViewTextBoxColumn()
                With colValorForma
                    .HeaderText = "Valor Fôrma"
                    .DataPropertyName = "valorForma"
                    .Width = 90
                    .Frozen = True
                    .ReadOnly = False
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colValorForma)

                Dim colDiluir As New DataGridViewCheckBoxColumn()
                With colDiluir
                    .HeaderText = "Diluir"
                    .DataPropertyName = "diluir"
                    .Width = 35
                    .ReadOnly = False
                    .Visible = True
                    .ValueType = System.Type.GetType("System.boolean")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colDiluir)

                .Rows.Clear()
                .Refresh()

            End With

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

    Private Sub preencherGridForma()
        Dim datFormasRegiao As New DataTable
        Dim drFormaRegiao As DataRow()
        Try

            drFormaRegiao = dsProposta.Tables(ctrProposta.eTabelas.FORMA).Select("codRegiao=" & Me.RegiaoProposta)

            dgvForma.Rows.Clear()
            If drFormaRegiao.Length > 0 Then
                dgvForma.DataSource = Nothing

                With dgvForma

                    For i As Int32 = 0 To drFormaRegiao.Length - 1
                        .Rows.Add()
                        .Item(ctrForma.eColunasForma.COD_REGIAO, .Rows.Count - 1).Value = conversao.toInt32(drFormaRegiao(i).Item(ctrForma.eColunasForma.COD_REGIAO))
                        .Item(ctrForma.eColunasForma.COD_PRODUTO, .Rows.Count - 1).Value = conversao.nuloParaVazio(drFormaRegiao(i).Item(ctrForma.eColunasForma.COD_PRODUTO))
                        .Item(ctrForma.eColunasForma.PRODUTO, .Rows.Count - 1).Value = conversao.nuloParaVazio(drFormaRegiao(i).Item(ctrForma.eColunasForma.PRODUTO))
                        .Item(ctrForma.eColunasForma.FORMA, .Rows.Count - 1).Value = conversao.nuloParaVazio(drFormaRegiao(i).Item(ctrForma.eColunasForma.FORMA))
                        .Item(ctrForma.eColunasForma.VALOR_FORMA, .Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(drFormaRegiao(i).Item(ctrForma.eColunasForma.VALOR_FORMA)))
                        .Item(ctrForma.eColunasForma.DILUIR, .Rows.Count - 1).Value = conversao.toBoolean(drFormaRegiao(i).Item(ctrForma.eColunasForma.DILUIR))
                    Next
                End With

                btnGravarFormas.Enabled = True

            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub diluirFormaProduto(ByVal sCodProduto As String, ByVal iCodRegiao As Int32, ByVal dValorForma As Decimal)
        Dim drProdutosForma As DataRow()
        Dim dQuantidade As Double = 0
        Try
            drProdutosForma = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("CodRegiao = " & iCodRegiao &
                                                                                      " And codProduto='" & sCodProduto &
                                                                                      "' And Forma=" & True)

            If drProdutosForma.Length > 0 Then
                For i As Int32 = 0 To drProdutosForma.Length - 1
                    drProdutosForma(i).BeginEdit()
                    dQuantidade = drProdutosForma(i).Item(ctrProduto.eColunasProdutos.QUANTIDADE)
                    drProdutosForma(i).Item(ctrProduto.eColunasProdutos.VALOR_FORMA) = Me.objForma.retornarValorForma(dValorForma, dQuantidade)
                    drProdutosForma(i).EndEdit()
                Next
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try
    End Sub

#End Region

#Region "Eventos"

    Private Sub btnGravarFormas_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGravarFormas.Click
        Dim bDiluir As Boolean = False
        Dim dValorForma As Decimal
        Dim sCodProduto As String
        Try

            For i As Int32 = 0 To dgvForma.RowCount - 1
                bDiluir = conversao.toBoolean(dgvForma.Item(ctrForma.eColunasForma.DILUIR, i).Value)
                dValorForma = conversao.toDecimal(dgvForma.Item(ctrForma.eColunasForma.VALOR_FORMA, i).Value)
                sCodProduto = conversao.nuloParaVazio(dgvForma.Item(ctrForma.eColunasForma.COD_PRODUTO, i).Value)
                Me.gravarForma(eAcaoItens.Editar,
                               Me.RegiaoProposta,
                               sCodProduto,
                               conversao.nuloParaVazio(dgvForma.Item(ctrForma.eColunasForma.PRODUTO, i).Value),
                            conversao.nuloParaVazio(dgvForma.Item(ctrForma.eColunasForma.FORMA, i).Value),
                            dValorForma, bDiluir)

                If bDiluir Then
                    Me.diluirFormaProduto(sCodProduto, Me.RegiaoProposta, dValorForma)
                Else
                    Me.diluirFormaProduto(sCodProduto, Me.RegiaoProposta, 0)
                End If


            Next

            Me.preencherGridForma()

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

    Private Sub dgvForma_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvForma.CellEndEdit
        Try
            If e.RowIndex >= 0 And e.ColumnIndex = ctrForma.eColunasForma.VALOR_FORMA Then
                dgvForma.Item(e.ColumnIndex, e.RowIndex).Value = Formatacao.formatValor(dgvForma.Item(e.ColumnIndex, e.RowIndex).Value)
            End If
        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try
    End Sub

    Private Sub tpFormas_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tpFormas.Enter

        Me.preencherGridForma()

    End Sub

#End Region

#End Region

#End Region

#Region "Produtos->Refratários->Terceiros"

#Region "Variáveis"

    Private objTerceiros As New ctrTerceiros
    Private iAcaoTerceirosAtual As eAcaoItens
    Private alValidacaoTerceiros As New ArrayList(0)

#End Region

#Region "Métodos privados"

    Private Sub configurarGridTerceiros()
        Try
            With dgvTerceiros
                .DataSource = Nothing
                .AutoGenerateColumns = False
                .AllowUserToResizeColumns = False
                .AllowUserToResizeRows = False
                .Columns.Clear()

                Dim colRegiao As New DataGridViewTextBoxColumn()
                With colRegiao
                    .HeaderText = "codRegiao"
                    .DataPropertyName = "codRegiao"
                    .Width = 285
                    .Frozen = True
                    .ReadOnly = False
                    .Visible = False
                    .ValueType = System.Type.GetType("System.integer")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colRegiao)


                Dim colItem As New DataGridViewTextBoxColumn()
                With colItem
                    .HeaderText = ""
                    .DataPropertyName = "numItem"
                    .Width = 20
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = False
                    .ValueType = System.Type.GetType("System.Integer")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colItem)

                Dim colCodProduto As New DataGridViewTextBoxColumn()
                With colCodProduto
                    .HeaderText = "Produto"
                    .DataPropertyName = "produto"
                    .Width = 60
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = True
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                End With

                .Columns.Add(colCodProduto)

                Dim colMarca As New DataGridViewTextBoxColumn()
                With colMarca
                    .HeaderText = "Marca"
                    .DataPropertyName = "marca"
                    .Width = 170
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                End With
                .Columns.Add(colMarca)

                Dim colFormato As New DataGridViewTextBoxColumn()
                With colFormato
                    .HeaderText = "Formato"
                    .DataPropertyName = "formato"
                    .Width = 170
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                End With
                .Columns.Add(colFormato)

                Dim colUnidade As New DataGridViewTextBoxColumn()
                With colUnidade
                    .HeaderText = "Unid."
                    .DataPropertyName = "unidade"
                    .Width = 55
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                End With
                .Columns.Add(colUnidade)

                Dim colQuantidade As New DataGridViewTextBoxColumn()
                With colQuantidade
                    .HeaderText = "Quant."
                    .DataPropertyName = "quantidade"
                    .Width = 50
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.Integer")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                End With
                .Columns.Add(colQuantidade)

                Dim colCusto As New DataGridViewTextBoxColumn()
                With colCusto
                    .HeaderText = "Custo"
                    .DataPropertyName = "custoUnitario"
                    .Width = 70
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                End With
                .Columns.Add(colCusto)

                Dim colCustoTotal As New DataGridViewTextBoxColumn()
                With colCustoTotal
                    .HeaderText = "Custo Total."
                    .DataPropertyName = "custoTotal"
                    .Width = 90
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                End With
                .Columns.Add(colCustoTotal)

                Dim colBDI As New DataGridViewTextBoxColumn()
                With colBDI
                    .HeaderText = "BDI"
                    .DataPropertyName = "BDI"
                    .Width = 35
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                End With
                .Columns.Add(colBDI)

                Dim colPreco As New DataGridViewTextBoxColumn()
                With colPreco
                    .HeaderText = "Preço"
                    .DataPropertyName = "precoUnitario"
                    .Width = 70
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                End With
                .Columns.Add(colPreco)

                Dim colPrecoTotal As New DataGridViewTextBoxColumn()
                With colPrecoTotal
                    .HeaderText = "Preço Total."
                    .DataPropertyName = "precoTotal"
                    .Width = 90
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                End With
                .Columns.Add(colPrecoTotal)

                .Rows.Clear()
                .Refresh()

            End With

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

    Private Sub preencherTerceiros(ByVal iAcaoItem As eAcaoItens,
                                   ByVal drTerceiros As DataRow,
                                   ByVal sMarcaAnt As String,
                                   ByVal sFormatoAnt As String,
                                   ByVal sCodProdutoAnt As String)

        Try
            Dim sMarca As String
            Dim sFormato As String

            iAcaoTerceirosAtual = iAcaoItem

            If Not drTerceiros Is Nothing Then
                With drTerceiros
                    Me.txtTerCodProduto.Text = conversao.nuloParaZero(.Item("produto"))
                    Me.txtTerCodProduto.Tag = conversao.nuloParaZero(.Item("produto"))
                    sMarca = conversao.nuloParaVazio(.Item("marca"))
                    Me.txtTerMarca.Tag = IIf(sMarca = sMarcaAnt, sMarca, sMarcaAnt)
                    Me.txtTerMarca.Text = sMarca
                    sFormato = conversao.nuloParaVazio(.Item("formato"))
                    Me.txtTerFormato.Tag = IIf(sFormato = sFormatoAnt, sFormato, sFormatoAnt)
                    Me.txtTerFormato.Text = sFormato
                    Me.cboUnidade.SelectedText = conversao.toInt32(.Item("unidade"))
                    Me.txtTerQuantidade.Text = conversao.toInt32(.Item("quantidade"))
                    Me.txtTerBDI.Text = Formatacao.formatValor(conversao.toDecimal(.Item("bdi")))
                    Me.txtTerPreco.Text = Formatacao.formatValor(conversao.toDecimal(.Item("precoUnitario")))
                    Me.txtTerCusto.Text = Formatacao.formatValor(conversao.toDecimal(.Item("custoUnitario")))
                    Me.txtTerCustoTotal.Text = Formatacao.formatValor(conversao.toDecimal(.Item("custoTotal")))
                    Me.txtTerPrecoTotal.Text = Formatacao.formatValor(conversao.toDecimal(.Item("precoTotal")))

                End With

                Me.btnLimparTerceiros.Enabled = True
                Me.btnGravarTerceiro.Enabled = True
                If iAcaoItem = eAcaoItens.Editar Then
                    Me.btnGravarTerceiro.Image = My.Resources.DocumentEdit
                    Me.btnRemoverTerceiro.Enabled = (sMarca = sMarcaAnt) And (sFormato = sFormatoAnt)
                Else
                    Me.btnGravarTerceiro.Image = My.Resources.Document_
                End If
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub preencherGridTerceiros()
        Dim datTerceirosRegiao As New DataTable
        Dim drTerceirosRegiao As DataRow()
        Try

            drTerceirosRegiao = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("codRegiao=" & iRegiaoProposta)
            If drTerceirosRegiao.Length > 0 Then
                datTerceirosRegiao = drTerceirosRegiao.CopyToDataTable

            End If
            dgvTerceiros.DataSource = Nothing
            dgvTerceiros.Rows.Clear()
            If Not datTerceirosRegiao Is Nothing Then
                With dgvTerceiros
                    For Each drLinha As DataRow In datTerceirosRegiao.Rows
                        .Rows.Add()
                        .Item(ctrTerceiros.eColunasTerceiros.NUM_ITEM, .Rows.Count - 1).Value = conversao.nuloParaVazio(drLinha.Item(ctrTerceiros.eColunasTerceiros.NUM_ITEM))
                        .Item(ctrTerceiros.eColunasTerceiros.PRODUTO, .Rows.Count - 1).Value = conversao.nuloParaVazio(drLinha.Item(ctrTerceiros.eColunasTerceiros.PRODUTO))
                        .Item(ctrTerceiros.eColunasTerceiros.MARCA, .Rows.Count - 1).Value = conversao.nuloParaVazio(drLinha.Item(ctrTerceiros.eColunasTerceiros.MARCA))
                        .Item(ctrTerceiros.eColunasTerceiros.FORMATO, .Rows.Count - 1).Value = conversao.nuloParaVazio(drLinha.Item(ctrTerceiros.eColunasTerceiros.FORMATO))
                        .Item(ctrTerceiros.eColunasTerceiros.UNIDADE, .Rows.Count - 1).Value = conversao.nuloParaVazio(drLinha.Item(ctrTerceiros.eColunasTerceiros.UNIDADE))
                        .Item(ctrTerceiros.eColunasTerceiros.COD_REGIAO, .Rows.Count - 1).Value = conversao.toInt32(drLinha.Item(ctrTerceiros.eColunasTerceiros.COD_REGIAO))
                        .Item(ctrTerceiros.eColunasTerceiros.BDI, .Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(drLinha.Item(ctrTerceiros.eColunasTerceiros.BDI)))
                        .Item(ctrTerceiros.eColunasTerceiros.CUSTO_UNITARIO, .Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(drLinha.Item(ctrTerceiros.eColunasTerceiros.CUSTO_UNITARIO)))
                        .Item(ctrTerceiros.eColunasTerceiros.CUSTO_TOTALL, .Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(drLinha.Item(ctrTerceiros.eColunasTerceiros.CUSTO_TOTALL)))
                        .Item(ctrTerceiros.eColunasTerceiros.PRECO_UNITARIO, .Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(drLinha.Item(ctrTerceiros.eColunasTerceiros.PRECO_UNITARIO)))
                        .Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL, .Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(drLinha.Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL)))
                        .Item(ctrTerceiros.eColunasTerceiros.QUANTIDADE, .Rows.Count - 1).Value = conversao.toInt32(drLinha.Item(ctrTerceiros.eColunasTerceiros.QUANTIDADE))


                    Next
                End With
            End If

            Me.btnAplicarBDI.Enabled = dgvTerceiros.Rows.Count > 0
            Me.txtBDIGeral.Enabled = dgvTerceiros.Rows.Count > 0
            Me.lblBDIGeral.Enabled = dgvTerceiros.Rows.Count > 0

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try


    End Sub

    Private Sub pesquisarProdutoTerceiro(ByVal sCodProduto As String)
        Dim sSql As String
        Dim frmDialogo As New frmPesquisa
        Dim drProduto As DataRow()

        Try
            If Me.RegiaoProposta > 0 Then
                If sCodProduto = String.Empty Then
                    sSql = Me.objProduto.sqlConsulta(ctrProduto.tipoProduto.Terceiros)

                    With frmDialogo
                        .Sql = sSql
                        .Titulo = "Pesquisar Produto"
                        .CarregaTela()
                        If .DS.Tables(0).Rows.Count > 0 Then
                            .ShowDialog()
                            If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                                sCodProduto = Persistencia.Conversao.ToString(.ID)

                                drProduto = .DS.Tables(0).Select("Código='" & sCodProduto.Trim & "'")
                                If drProduto.Length = 1 Then
                                    Me.txtTerCodProduto.Text = sCodProduto
                                    Me.txtTerMarca.Text = drProduto(0).Item("Marca")
                                    Me.txtTerMarca.ReadOnly = True
                                    Me.txtTerFormato.Text = drProduto(0).Item("Produto")
                                    Me.txtTerFormato.ReadOnly = True
                                    cboUnidade.Text = ""
                                    cboUnidade.Enabled = False

                                    Me.btnGravarTerceiro.Image = My.Resources.Document_
                                    Me.btnGravarTerceiro.Enabled = True
                                    btnLimparTerceiros.Enabled = True

                                End If

                            End If
                        Else
                            MsgBox("Não existem produtos de terceiros cadastrados.", MsgBoxStyle.Exclamation, Me.Text)
                            Exit Sub
                        End If

                    End With
                End If

            Else
                MessageBox.Show("Informe a região para inserir o produto.", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Function gravarTerceiro(ByVal iAcaoTerceiro As eAcaoItens,
                                  ByVal iCodRegiao As Int32,
                                  ByVal sCodProduto As String,
                                  ByVal sCodProdutoAnt As String,
                                  ByVal sMarca As String,
                                  ByVal sMarcaAnt As String,
                                  ByVal sFormato As String,
                                  ByVal sFormatoAnt As String,
                                  ByVal sUnidade As String,
                                  ByVal iQuantidade As Int32,
                                  ByVal dCusto As Decimal,
                                  ByVal dCustoTotal As Decimal,
                                  ByVal dBdi As Decimal,
                                  ByVal dPreco As Decimal,
                                  ByVal dPrecoTotal As Decimal) As Boolean

        Dim drTerceiros As DataRow() = Nothing
        Dim drTerceiro As DataRow = Nothing
        Dim bRetorno As Double = False

        Try
            Me.limparErrosTerceiros()
            If Me.validarInsercaoTerceiro(iAcaoTerceiro, iCodRegiao, sCodProduto, sMarca, sFormato, iQuantidade, sUnidade, dPreco) Then

                If (sCodProduto <> sCodProdutoAnt) Or (sMarca <> sMarcaAnt) Or (sFormato <> sFormatoAnt) Then
                    If (sCodProduto <> sCodProdutoAnt) Then
                        If sCodProduto <> String.Empty Then
                            'Valida se o produto informado já existe naquela região
                            drTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("Produto= '" & sCodProduto &
                                                                                                   "' And CodRegiao= " & iCodRegiao)
                        Else
                            'Valida se o produto informado já existe naquela região
                            drTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("Marca= '" & sMarca &
                                                                                                   "' And Formato='" & sFormato &
                                                                                                   "' And CodRegiao= " & iCodRegiao)
                        End If

                    Else
                        'Valida se o produto informado já existe naquela região
                        drTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("Marca= '" & sMarca &
                                                                                               "' And Formato='" & sFormato &
                                                                                               "' And CodRegiao= " & iCodRegiao)
                    End If

                    If drTerceiros.Length > 0 And iAcaoTerceiro <> eAcaoItens.Excluir Then
                        MessageBox.Show("Produto de terceiro já existente nesta região. " & Environment.NewLine &
                                        "Verifique",
                                        Application.ProductName,
                                        MessageBoxButtons.OK,
                                        MessageBoxIcon.Exclamation)
                        Exit Function
                    End If
                End If

                Select Case iAcaoTerceiro

                    Case eAcaoItens.Inserir
                        drTerceiro = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).NewRow

                    Case eAcaoItens.Editar
                        drTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("Marca= '" & sMarcaAnt &
                                                                                           "' And Formato='" & sFormatoAnt &
                                                                                           "' And CodRegiao= " & iCodRegiao)
                        If drTerceiros.Length = 1 Then
                            drTerceiro = drTerceiros(0)
                            drTerceiro.BeginEdit()
                        Else
                            MessageBox.Show("Produto de terceiro não identificado. Alteração cancelada. " & Environment.NewLine &
                                       "Verifique",
                                       Application.ProductName,
                                       MessageBoxButtons.OK,
                                       MessageBoxIcon.Exclamation)
                        End If
                    Case eAcaoItens.Excluir
                        drTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("Marca= '" & sMarca &
                                                                                           "' And Formato='" & sFormato &
                                                                                           "' And CodRegiao= " & iCodRegiao)
                        If drTerceiros.Length = 1 Then
                            If MessageBox.Show("Tem certeza que deseja excluir este item?",
                                               Application.ProductName,
                                               MessageBoxButtons.YesNo,
                                               MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                                For i As Int32 = 0 To drTerceiros.Length - 1
                                    drTerceiros(i).Delete()
                                Next
                            End If
                        End If

                        Return True

                        Exit Function

                End Select

                With drTerceiro
                    .Item(ctrTerceiros.eColunasTerceiros.COD_REGIAO) = iCodRegiao
                    .Item(ctrTerceiros.eColunasTerceiros.MARCA) = sMarca.Trim
                    .Item(ctrTerceiros.eColunasTerceiros.FORMATO) = sFormato.Trim
                    .Item(ctrTerceiros.eColunasTerceiros.PRODUTO) = sCodProduto
                    .Item(ctrTerceiros.eColunasTerceiros.UNIDADE) = sUnidade
                    .Item(ctrTerceiros.eColunasTerceiros.QUANTIDADE) = iQuantidade
                    .Item(ctrTerceiros.eColunasTerceiros.CUSTO_UNITARIO) = dCusto
                    .Item(ctrTerceiros.eColunasTerceiros.CUSTO_TOTALL) = dCustoTotal
                    .Item(ctrTerceiros.eColunasTerceiros.BDI) = dBdi
                    .Item(ctrTerceiros.eColunasTerceiros.PRECO_UNITARIO) = dPreco
                    .Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL) = dPrecoTotal

                End With

                If iAcaoTerceiro = eAcaoItens.Inserir Then
                    dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Rows.Add(drTerceiro)
                ElseIf iAcaoTerceiro = eAcaoItens.Excluir Then
                    drTerceiro.EndEdit()
                End If

                bRetorno = True

            End If

            Return bRetorno

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Function

    Private Function validarInsercaoTerceiro(ByVal iAcaoItens As eAcaoItens,
                                             ByVal iCodRegiao As Int32,
                                             ByVal sCodProduto As String,
                                             ByVal sMarca As String,
                                             ByVal sFormato As String,
                                             ByVal iQuantidade As Int32,
                                             ByVal sUnidade As String,
                                             ByVal dPreco As Decimal) As Boolean
        Dim bRetorno As Boolean = False
        Try

            Dim iContadorMensagens As Int32
            Dim sMensagem As String

            If iAcaoItens <> eAcaoItens.Excluir Then
                If Not objTerceiros.validaInclusaoTerceirosProposta(iCodRegiao,
                                                                    sCodProduto,
                                                                    sMarca,
                                                                    sFormato,
                                                                    iQuantidade,
                                                                    sUnidade,
                                                                    dPreco) Then

                    alValidacaoTerceiros = objTerceiros.retornaMensagensValidacao

                    For iContadorMensagens = 0 To alValidacaoTerceiros(DSFronteiraPadrao.frmPadrao.eMensagem.Codigo).Count - 1

                        sMensagem = alValidacaoTerceiros(DSFronteiraPadrao.frmPadrao.eMensagem.Mensagem).item(iContadorMensagens)

                        Select Case alValidacaoTerceiros(DSFronteiraPadrao.frmPadrao.eMensagem.Codigo).item(iContadorMensagens)
                            Case ctrTerceiros.eValidaInclusaoTerceiro.MARCA_OBRIGATORIA
                                Me.epPadrao.SetError(Me.txtTerMarca, sMensagem)

                            Case ctrTerceiros.eValidaInclusaoTerceiro.FORMATO_OBRIGATORIO
                                Me.epPadrao.SetError(Me.txtTerFormato, sMensagem)

                            Case ctrTerceiros.eValidaInclusaoTerceiro.QUANTIDADE_OBRIGATORIA
                                Me.epPadrao.SetError(Me.txtTerQuantidade, sMensagem)

                            Case ctrTerceiros.eValidaInclusaoTerceiro.UNIDADE_OBRIGATORIA
                                Me.epPadrao.SetError(Me.cboUnidade, sMensagem)

                            Case ctrTerceiros.eValidaInclusaoTerceiro.PRECO_OBRIGATORIO
                                Me.epPadrao.SetError(Me.txtTerPreco, sMensagem)

                            Case ctrProduto.eValidaInclusaoProduto.COD_REGIAO_OBRIGATORIO
                                MessageBox.Show("Selecione a região para inclusão do item.",
                                                Application.ProductName,
                                                MessageBoxButtons.OK,
                                                MessageBoxIcon.Exclamation)
                                Me.dgvRegioes.Focus()
                        End Select

                    Next
                Else
                    bRetorno = True
                End If
            Else
                bRetorno = True
            End If

            Return bRetorno

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Function

    Private Sub limparErrosTerceiros()

        Me.epPadrao.SetError(txtTerMarca, "")
        Me.epPadrao.SetError(txtTerFormato, "")
        Me.epPadrao.SetError(txtTerQuantidade, "")
        Me.epPadrao.SetError(cboUnidade, "")
        Me.epPadrao.SetError(txtTerPreco, "")

    End Sub

    Private Sub limparTerceiros()

        Try

            Me.limpaCampos(grpTerceiros)
            Me.txtTerMarca.Tag = String.Empty
            Me.txtTerFormato.Tag = String.Empty
            Me.txtTerCodProduto.Tag = String.Empty

            Me.txtTerMarca.ReadOnly = False
            Me.txtTerFormato.ReadOnly = False
            Me.cboUnidade.Enabled = True

            Me.iAcaoTerceirosAtual = eAcaoItens.Inserir

            Me.btnGravarTerceiro.Image = My.Resources.Document_
            Me.btnGravarTerceiro.Enabled = False
            Me.btnRemoverTerceiro.Enabled = False
            Me.btnLimparTerceiros.Enabled = False

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Sub

    Private Sub aplicarBDIGeral(ByVal iCodRegiao As Int32, ByVal dBDI As Double)
        Dim drProdutosTerceiros As DataRow() = Nothing
        Dim dCusto As Decimal = 0
        Dim dPreco As Decimal = 0
        Dim dPrecoTotal As Decimal = 0
        Dim iQuantidade As Int32 = 0

        Try
            If iCodRegiao = 0 Then
                drProdutosTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("codRegiao>" & iCodRegiao)
            Else
                drProdutosTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("codRegiao=" & iCodRegiao)
            End If

            With drProdutosTerceiros
                For i As Int32 = 0 To drProdutosTerceiros.Length - 1
                    With drProdutosTerceiros(i)
                        dCusto = conversao.toDecimal(.Item(ctrTerceiros.eColunasTerceiros.CUSTO_UNITARIO))
                        iQuantidade = conversao.toInt32(.Item(ctrTerceiros.eColunasTerceiros.QUANTIDADE))


                        dPreco = objTerceiros.calcularPrecoTerceiros(dCusto, dBDI)
                        Me.objTerceiros.calcularValoresTerceiros(iQuantidade, dPreco, dCusto, dPrecoTotal, 0)

                        .BeginEdit()

                        .Item(ctrTerceiros.eColunasTerceiros.BDI) = dBDI
                        .Item(ctrTerceiros.eColunasTerceiros.PRECO_UNITARIO) = dPreco
                        .Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL) = dPrecoTotal

                        .AcceptChanges()

                    End With
                Next
            End With

            Me.preencherGridTerceiros()

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

#End Region

#Region "Eventos"

    Private Sub txtTerCodProduto_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTerCodProduto.Leave

        Try
            If txtTerCodProduto.Text = String.Empty Then
                Me.txtTerMarca.Text = String.Empty
                Me.txtTerMarca.ReadOnly = False
                Me.txtTerFormato.Text = String.Empty
                Me.txtTerFormato.ReadOnly = False
                Me.cboUnidade.Items.AddRange(objTerceiros.sUnidades)
            Else
                Me.pesquisarProdutoTerceiro(Me.txtTerCodProduto.Text.Trim)
            End If
        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub btnGravarTerceiro_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnGravarTerceiro.Click

        Try

            If Me.gravarTerceiro(iAcaoTerceirosAtual,
                 Me.RegiaoProposta,
                 Me.txtTerCodProduto.Text.Trim,
                 conversao.nuloParaVazio(Me.txtTerCodProduto.Tag),
                 Me.txtTerMarca.Text.Trim,
                 conversao.nuloParaVazio(Me.txtTerMarca.Tag),
                 Me.txtTerFormato.Text,
                 conversao.nuloParaVazio(Me.txtTerFormato.Tag),
                 Me.cboUnidade.Text,
                 conversao.toInt32(Me.txtTerQuantidade.Text),
                 conversao.toDecimal(Me.txtTerCusto.Text),
                 conversao.toDecimal(Me.txtTerCustoTotal.Text),
                 conversao.toDecimal(Me.txtTerBDI.Text),
                 conversao.toDecimal(Me.txtTerPreco.Text),
                 conversao.toDecimal(Me.txtTerPrecoTotal.Text)) Then


                Me.preencherGridTerceiros()
                Me.limparTerceiros()

            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub btnProdutoTerceiros_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnProdutoTerceiros.Click

        Me.pesquisarProdutoTerceiro(String.Empty)

    End Sub

    Private Sub dgvTerceiros_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvTerceiros.CellClick
        Dim drTerceiros As DataRow()
        Dim sMarca As String
        Dim sFormato As String
        Dim iCodRegiao As Int32
        Dim sCodProduto As String
        Dim sConsulta As String = ""

        Try
            If e.RowIndex >= 0 Then
                sCodProduto = conversao.nuloParaVazio(dgvTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRODUTO, e.RowIndex).Value)
                sMarca = conversao.nuloParaVazio(dgvTerceiros.Item(ctrTerceiros.eColunasTerceiros.MARCA, e.RowIndex).Value)
                sFormato = conversao.nuloParaVazio(dgvTerceiros.Item(ctrTerceiros.eColunasTerceiros.FORMATO, e.RowIndex).Value)
                iCodRegiao = conversao.vazioParaZero(dgvTerceiros.Item(ctrTerceiros.eColunasTerceiros.COD_REGIAO, e.RowIndex).Value)

                If sCodProduto <> String.Empty Then
                    sConsulta = "Produto='" & sCodProduto & "'"
                Else
                    sConsulta = "Marca='" & sMarca & "' And Formato='" & sFormato & "'"
                End If
                If sMarca <> String.Empty Then

                End If
                drTerceiros = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select(sConsulta & " And CodRegiao=" & iCodRegiao)
                If drTerceiros.Length = 1 Then
                    preencherTerceiros(eAcaoItens.Editar, drTerceiros(0), sMarca, sFormato, sCodProduto)
                End If

            End If
        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub btnLimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimparProduto.Click

        limparProduto()

    End Sub

    Private Sub btnRemoverTerceiro_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRemoverTerceiro.Click
        Try

            If Me.gravarTerceiro(eAcaoItens.Excluir,
                             Me.iRegiaoProposta,
                             Me.txtTerCodProduto.Text,
                             "",
                             Me.txtTerMarca.Text,
                             Me.txtTerMarca.Tag,
                             Me.txtTerFormato.Text,
                             Me.txtTerFormato.Tag,
                             0, 0, 0, 0, 0, 0, 0) Then

                Me.preencherGridTerceiros()

                Me.limparTerceiros()

            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Sub

    Private Sub txtTerMarca_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTerMarca.Leave
        btnGravarTerceiro.Enabled = (txtTerMarca.Text <> String.Empty) Or
                                    (txtTerFormato.Text <> String.Empty)
        btnLimparTerceiros.Enabled = (txtTerMarca.Text <> String.Empty) Or
                            (txtTerFormato.Text <> String.Empty)
    End Sub

    Private Sub txtTerFormato_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTerFormato.Leave
        btnGravarTerceiro.Enabled = (txtTerMarca.Text <> String.Empty) Or
                            (txtTerFormato.Text <> String.Empty)
        btnLimparTerceiros.Enabled = (txtTerMarca.Text <> String.Empty) Or
                    (txtTerFormato.Text <> String.Empty)
    End Sub

    Private Sub txtTerQuantidade_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTerQuantidade.Leave
        Dim dPrecoTotal As Decimal = 0
        Dim dCustoTotal As Decimal = 0

        Try

            Me.objTerceiros.calcularValoresTerceiros(conversao.toInt32(txtTerQuantidade.Text),
                                                     conversao.toDecimal(txtTerPreco.Text),
                                                     conversao.toDecimal(txtTerCusto.Text),
                                                     dPrecoTotal,
                                                     dCustoTotal)

            Me.txtTerQuantidade.Text = conversao.toDecimal(Me.txtTerQuantidade.Text)
            Me.txtTerPrecoTotal.Text = Formatacao.formatValor(dPrecoTotal)
            Me.txtTerCustoTotal.Text = Formatacao.formatValor(dCustoTotal)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub txtTerPreco_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTerPreco.Leave
        Dim dPrecoTotal As Decimal = 0
        Dim dCustoTotal As Decimal = 0

        Try

            Me.objTerceiros.calcularValoresTerceiros(conversao.toInt32(txtTerQuantidade.Text),
                                                     conversao.toDecimal(txtTerPreco.Text),
                                                     conversao.toDecimal(txtTerCusto.Text),
                                                     dPrecoTotal,
                                                     dCustoTotal)

            Me.txtTerPreco.Text = Formatacao.formatValor(Me.txtTerPreco.Text)
            Me.txtTerPrecoTotal.Text = Formatacao.formatValor(dPrecoTotal)
            Me.txtTerCustoTotal.Text = Formatacao.formatValor(dCustoTotal)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub txtTerCusto_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTerCusto.Leave
        Dim dPrecoTotal As Decimal = 0
        Dim dCustoTotal As Decimal = 0
        Dim dPreco As Decimal = 0

        Try
            Me.txtTerCusto.Text = Formatacao.formatValor(Me.txtTerCusto.Text)

            dPreco = Me.objTerceiros.calcularPrecoTerceiros(conversao.toDecimal(Me.txtTerCusto.Text), conversao.toDecimal(Me.txtTerBDI.Text))
            Me.txtTerPreco.Text = Formatacao.formatValor(dPreco)

            Me.objTerceiros.calcularValoresTerceiros(conversao.toInt32(txtTerQuantidade.Text),
                                                     conversao.toDecimal(txtTerPreco.Text),
                                                     conversao.toDecimal(txtTerCusto.Text),
                                                     dPrecoTotal,
                                                     dCustoTotal)


            Me.txtTerPrecoTotal.Text = Formatacao.formatValor(dPrecoTotal)
            Me.txtTerCustoTotal.Text = Formatacao.formatValor(dCustoTotal)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub txtTerBDI_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtTerBDI.Leave
        Dim dPrecoTotal As Decimal = 0
        Dim dCustoTotal As Decimal = 0
        Dim dPreco As Decimal = 0
        Dim dBDI As Decimal = 0

        Try

            dBDI = conversao.toDecimal(Me.txtTerBDI.Text)
            If Not objTerceiros.validaMaxBDI(dBDI) Then
                MessageBox.Show(objTerceiros.sValidacaoBDI, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
                dBDI = ctrTerceiros.MAX_BDI
            End If
            Me.txtTerBDI.Text = Formatacao.formatValor(dBDI)
            dPreco = Me.objTerceiros.calcularPrecoTerceiros(conversao.toDecimal(Me.txtTerCusto.Text), dBDI)
            Me.txtTerPreco.Text = Formatacao.formatValor(dPreco)

            Me.objTerceiros.calcularValoresTerceiros(conversao.toInt32(txtTerQuantidade.Text),
                                                     conversao.toDecimal(txtTerPreco.Text),
                                                     conversao.toDecimal(txtTerCusto.Text),
                                                     dPrecoTotal,
                                                     dCustoTotal)


            Me.txtTerPrecoTotal.Text = Formatacao.formatValor(dPrecoTotal)
            Me.txtTerCustoTotal.Text = Formatacao.formatValor(dCustoTotal)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

    Private Sub txtBDIGeral_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtBDIGeral.Leave
        Dim dBDI As Decimal = 0

        Try
            dBDI = conversao.toDecimal(Me.txtBDIGeral.Text)
            If Not objTerceiros.validaMaxBDI(dBDI) Then
                MessageBox.Show(objTerceiros.sValidacaoBDI, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
                dBDI = ctrTerceiros.MAX_BDI
            End If
            Me.txtBDIGeral.Text = Formatacao.formatValor(dBDI)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try
    End Sub

    Private Sub btnAplicarBDI_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAplicarBDI.Click
        Dim iCodRegiao As Int32
        Dim dBDI As Decimal = 0
        Try
            Select Case MessageBox.Show("Deseja aplicar o valor de BDI de " & Me.txtBDIGeral.Text & " para todos os produtos da proposta?" & Environment.NewLine &
                                       "Digite: " & Environment.NewLine &
                                       " - SIM para aplicar a todos dos produtos da proposta " & Environment.NewLine &
                                       " - NÃO para aplicar a todos os produtos de terceiros desta região " & Environment.NewLine &
                                       " - CANCELAR para não aplicar o valor de BDI a nenhum produto",
                                       Application.ProductName, MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question)

                Case Windows.Forms.DialogResult.Yes
                    iCodRegiao = 0
                Case Windows.Forms.DialogResult.No
                    iCodRegiao = Me.RegiaoProposta
                Case Else
                    Exit Sub
            End Select

            dBDI = conversao.toDecimal(Me.txtBDIGeral.Text)
            If objTerceiros.validaMaxBDI(dBDI) Then
                MessageBox.Show(objTerceiros.sValidacaoBDI, Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
                dBDI = ctrTerceiros.MAX_BDI
            End If
            Me.txtBDIGeral.Text = Formatacao.formatValor(dBDI)
            Me.aplicarBDIGeral(iCodRegiao, conversao.toDecimal(Me.txtBDIGeral.Text))

        Catch ex As Exception

        End Try

    End Sub


#End Region

#End Region

#End Region

#Region "Preço"

#Region "Enumeração"

    Private Enum ePreco
        AGRUPADOR = 0
        MARCA = 1
        MARCA_PRODUTO = 2
        COD_PRODUTO = 3
        QUANTIDADE = 4
        PESO_TOTAL = 5
        VALOR_TONELADA = 6
        CUSTO_TONELADA = 7
        PERC_ROYALTIES = 8
    End Enum

#End Region

#Region "Métodos Privados"

    Private Sub configurarGridPreco()
        Try
            With dgvPreco
                .DataSource = Nothing
                .AutoGenerateColumns = False
                .AllowUserToAddRows = False
                .AllowUserToResizeColumns = False
                .AllowUserToResizeRows = False
                .Columns.Clear()

                Dim colAgrupador As New DataGridViewTextBoxColumn()
                With colAgrupador
                    .HeaderText = ""
                    .Width = 20
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = True
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colAgrupador)

                Dim colMarca As New DataGridViewTextBoxColumn()
                With colMarca
                    .HeaderText = "Marca"
                    .DataPropertyName = "marca"
                    .Width = 400
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colMarca)

                Dim colMarcaProduto As New DataGridViewTextBoxColumn()
                With colMarcaProduto
                    .HeaderText = "MarcaProduto"
                    .DataPropertyName = "marcaProduto"
                    .Width = 400
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = False
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colMarcaProduto)

                Dim colCodProduto As New DataGridViewTextBoxColumn()
                With colCodProduto
                    .HeaderText = "codProduto"
                    .DataPropertyName = "codProduto"
                    .Width = 420
                    .Frozen = True
                    .ReadOnly = True
                    .Visible = False
                    .ValueType = System.Type.GetType("System.String")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colCodProduto)

                Dim colQuantidade As New DataGridViewTextBoxColumn()
                With colQuantidade
                    .HeaderText = "Quant."
                    .DataPropertyName = "qte"
                    .Width = 90
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.Integer")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colQuantidade)

                Dim colPesoTotal As New DataGridViewTextBoxColumn()
                With colPesoTotal
                    .HeaderText = "Peso Total"
                    .DataPropertyName = "pesoTotal"
                    .ToolTipText = "Peso total em toneladas"
                    .Width = 90
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.double")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colPesoTotal)

                Dim colPrecoTonelada As New DataGridViewTextBoxColumn()
                With colPrecoTonelada
                    .HeaderText = "Preço(T)"
                    .DataPropertyName = "preçoToneladda"
                    .ToolTipText = "Preço por tonelada"
                    .Width = 90
                    .Frozen = False
                    .ReadOnly = False
                    .Visible = True
                    .ValueType = System.Type.GetType("System.double")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colPrecoTonelada)

                Dim colCustoTonelada As New DataGridViewTextBoxColumn()
                With colCustoTonelada
                    .HeaderText = "Custo(T)"
                    .DataPropertyName = "custoToneladda"
                    .ToolTipText = "Custo por tonelada"
                    .Width = 90
                    .Frozen = False
                    .ReadOnly = False
                    .Visible = True
                    .ValueType = System.Type.GetType("System.double")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colCustoTonelada)

                Dim colPercRoyalties As New DataGridViewTextBoxColumn()
                With colPercRoyalties
                    .HeaderText = "% Royalties"
                    .DataPropertyName = "percRoyalties"
                    .ToolTipText = "Percentual Royalties"
                    .Width = 90
                    .Frozen = False
                    .ReadOnly = True
                    .Visible = True
                    .ValueType = System.Type.GetType("System.double")
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .DefaultCellStyle.BackColor = Color.LightGoldenrodYellow
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colPercRoyalties)

                .Rows.Clear()
                .Refresh()

            End With
        Catch ex As Exception

        End Try

    End Sub

    Private Sub preencherGridPreco()
        Dim sMarcaAtual As String = ""
        Dim sMarca As String = ""
        Dim dCusto As Decimal = 0
        Dim F As New System.Drawing.Font("Microsoft Sans Serif", 8.25)
        Dim datMarcas As New DataTable
        Dim datProdutos As New DataTable
        Dim dv As DataView
        Dim dPesoTotalProduto As Double = 0
        Dim dQuantidadeTotal As Double = 0
        Dim sCodProduto As String = ""
        Dim sCodProdutoAtual As String = ""

        Try
            dgvPreco.Rows.Clear()
            dv = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).DefaultView
            datMarcas = dv.ToTable(True, "descMarca")

            For Each drMarca As DataRow In datMarcas.Rows
                sMarca = drMarca.Item("descMarca")

                datProdutos = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("descMarca='" & sMarca & "'").CopyToDataTable
                dv = datProdutos.DefaultView
                dv.Sort = "codProduto"
                datProdutos = dv.ToTable

                With datProdutos.Rows(0)
                    dgvPreco.Rows.Add()
                    'Preencher Marca
                    dgvPreco.Item(ePreco.AGRUPADOR, dgvPreco.Rows.Count - 1).Value = "+"
                    dgvPreco.Item(ePreco.MARCA, dgvPreco.Rows.Count - 1).Value = sMarca
                    dgvPreco.Item(ePreco.PERC_ROYALTIES, dgvPreco.Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.ROYALTIES)))
                    dCusto = conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.CUSTO_MARCA))
                    dgvPreco.Item(ePreco.CUSTO_TONELADA, dgvPreco.Rows.Count - 1).Value = Formatacao.formatValor(dCusto)
                    dgvPreco.Item(ePreco.VALOR_TONELADA, dgvPreco.Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.VALOR_MARCA)))
                    dgvPreco.Rows(dgvPreco.Rows.Count - 1).DefaultCellStyle.Font = New System.Drawing.Font(F, FontStyle.Bold)


                End With

                For Each drProodutos As DataRow In datProdutos.Rows
                    With drProodutos
                        sCodProduto = conversao.nuloParaVazio(.Item(ctrProduto.eColunasProdutos.PRODUTO))

                        If sCodProduto <> sCodProdutoAtual Then
                            sCodProdutoAtual = sCodProduto

                            dgvPreco.Rows.Add()

                            dgvPreco.Item(ePreco.MARCA, dgvPreco.Rows.Count - 1).Value = conversao.nuloParaVazio(.Item(ctrProduto.eColunasProdutos.PRODUTO))
                            dgvPreco.Item(ePreco.MARCA_PRODUTO, dgvPreco.Rows.Count - 1).Value = sMarca
                            dgvPreco.Item(ePreco.COD_PRODUTO, dgvPreco.Rows.Count - 1).Value = conversao.nuloParaVazio(.Item(ctrProduto.eColunasProdutos.COD_PRODUTO))
                            dgvPreco.Item(ePreco.PERC_ROYALTIES, dgvPreco.Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.ROYALTIES)))
                            dgvPreco.Item(ePreco.VALOR_TONELADA, dgvPreco.Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.VALOR_MARCA)))
                            dgvPreco.Item(ePreco.CUSTO_TONELADA, dgvPreco.Rows.Count - 1).Value = Formatacao.formatValor(conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.CUSTO_MARCA)))
                            dgvPreco.Rows(dgvPreco.Rows.Count - 1).Visible = False
                            dQuantidadeTotal = 0
                            dPesoTotalProduto = 0

                        End If

                        dQuantidadeTotal += conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.QUANTIDADE))
                        dPesoTotalProduto += conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.PESO_TOTAL))
                        dgvPreco.Item(ePreco.QUANTIDADE, dgvPreco.Rows.Count - 1).Value = Formatacao.formatValor(dQuantidadeTotal)
                        dgvPreco.Item(ePreco.PESO_TOTAL, dgvPreco.Rows.Count - 1).Value = Formatacao.formatPeso(dPesoTotalProduto, 3)
                    End With
                Next

            Next

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

    Private Sub atualizarPreco(ByVal sMarca As String, ByVal sCodProduto As String, ByVal dValorMarca As Decimal,
                               ByVal dValorCusto As Decimal)
        Dim drProdutos As DataRow()
        Dim dPesoUnitario As Double
        Dim sUnidade As String = ""

        Try
            If sCodProduto <> String.Empty Then
                drProdutos = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("codProduto='" & sCodProduto & "'")
            Else
                drProdutos = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("descMarca='" & sMarca & "'")
            End If

            For i As Int32 = 0 To drProdutos.Length - 1
                drProdutos(i).BeginEdit()
                dPesoUnitario = conversao.toDecimal(drProdutos(i).Item(ctrProduto.eColunasProdutos.PESO))
                drProdutos(i).Item(ctrProduto.eColunasProdutos.VALOR_MARCA) = dValorMarca
                sUnidade = conversao.nuloParaVazio(drProdutos(i).Item(ctrProduto.eColunasProdutos.UNIDADE))
                drProdutos(i).Item(ctrProduto.eColunasProdutos.VALOR_UNITARIO) = Me.objProduto.calcularPrecoUnitario(dValorMarca,
                                                                                                                     dPesoUnitario, sUnidade)
                drProdutos(i).Item(ctrProduto.eColunasProdutos.CUSTO_MARCA) = dValorCusto
                drProdutos(i).Item(ctrProduto.eColunasProdutos.CUSTO_UNITARIO) = Me.objProduto.calcularPrecoUnitario(dValorCusto,
                                                                                                            dPesoUnitario, sUnidade)
                drProdutos(i).AcceptChanges()
            Next

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try

    End Sub

    Private Sub expandirRetrairMarca(ByVal sAgrupador As String, ByVal sMarca As String)
        Dim sMarcaProduto As String
        Dim sMarcaGrid As String
        Try
            For i As Int32 = 0 To dgvPreco.Rows.Count - 1
                sMarcaGrid = conversao.nuloParaVazio(dgvPreco.Item(ePreco.MARCA, i).Value)
                sMarcaProduto = conversao.nuloParaVazio(dgvPreco.Item(ePreco.MARCA_PRODUTO, i).Value)

                If sMarcaProduto = "" And String.Equals(sMarca, sMarcaGrid) Then
                    dgvPreco.Item(ePreco.AGRUPADOR, i).Value = IIf(String.Equals(sAgrupador, "+"), "-", "+")
                ElseIf String.Equals(sMarca, sMarcaProduto) Then
                    dgvPreco.Rows(i).Visible = (sAgrupador = "+")
                End If

            Next
        Catch ex As Exception

        End Try
    End Sub

#End Region

#Region "Eventos"

    Private Sub dgvPreco_CellClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPreco.CellClick
        Dim sMarca As String
        Dim sAgrupador As String

        Try
            If e.RowIndex >= 0 And e.ColumnIndex = ePreco.AGRUPADOR Then
                sMarca = dgvPreco.Item(ePreco.MARCA, e.RowIndex).Value
                If Not String.Equals(sMarca, String.Empty) Then
                    sAgrupador = dgvPreco.Item(ePreco.AGRUPADOR, e.RowIndex).Value
                    Me.expandirRetrairMarca(sAgrupador, sMarca)
                End If

            End If
        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try
    End Sub

    Private Sub dgvPreco_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvPreco.CellEndEdit
        Dim dPrecoTonelada As Decimal = 0
        Dim sCodProduto As String = ""
        Dim sMarca As String = ""
        Dim sMarcaProduto As String = ""
        Dim dCusto As Decimal = 0

        Try

            If e.RowIndex >= 0 Then
                dPrecoTonelada = conversao.toDecimal(dgvPreco.Item(ePreco.VALOR_TONELADA, e.RowIndex).Value)
                dCusto = conversao.toDecimal(dgvPreco.Item(ePreco.CUSTO_TONELADA, e.RowIndex).Value)

                dgvPreco.Item(ePreco.VALOR_TONELADA, e.RowIndex).Value = Formatacao.formatValor(dPrecoTonelada)
                dgvPreco.Item(ePreco.CUSTO_TONELADA, e.RowIndex).Value = Formatacao.formatValor(dCusto)
                sMarca = dgvPreco.Item(ePreco.MARCA, e.RowIndex).Value
                sMarcaProduto = dgvPreco.Item(ePreco.MARCA_PRODUTO, e.RowIndex).Value

                'É marca
                If String.IsNullOrEmpty(sMarcaProduto) Then
                    For i As Int32 = e.RowIndex + 1 To dgvPreco.Rows.Count - 1
                        sMarcaProduto = conversao.nuloParaVazio(dgvPreco.Item(ePreco.MARCA_PRODUTO, i).Value)
                        If sMarca = sMarcaProduto Then
                            dgvPreco.Item(ePreco.VALOR_TONELADA, e.RowIndex).Value = Formatacao.formatValor(dgvPreco.Item(ePreco.VALOR_TONELADA, e.RowIndex).Value)
                            dgvPreco.Item(ePreco.CUSTO_TONELADA, e.RowIndex).Value = Formatacao.formatValor(dgvPreco.Item(ePreco.CUSTO_TONELADA, e.RowIndex).Value)

                            dgvPreco.Item(ePreco.VALOR_TONELADA, i).Value = Formatacao.formatValor(dPrecoTonelada)
                            dgvPreco.Item(ePreco.CUSTO_TONELADA, i).Value = Formatacao.formatValor(dCusto)
                        End If
                    Next
                End If

            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Sub

    Private Sub tpPrecos2_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tpPrecos2.Enter

        Me.preencherGridPreco()

    End Sub

    Private Sub tpPrecos2_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles tpPrecos2.Leave
        Dim sMarca As String
        Dim sCodProduto As String
        Dim dPrecoTonelada As Decimal
        Dim dCusto As Decimal

        For Each drLinha As DataGridViewRow In dgvPreco.Rows
            sMarca = conversao.nuloParaVazio(drLinha.Cells(ePreco.MARCA).Value)
            sCodProduto = conversao.nuloParaVazio(drLinha.Cells(ePreco.COD_PRODUTO).Value)
            dPrecoTonelada = conversao.toDecimal(drLinha.Cells(ePreco.VALOR_TONELADA).Value)
            dCusto = conversao.toDecimal(drLinha.Cells(ePreco.CUSTO_TONELADA).Value)
            If sCodProduto <> String.Empty Then
                Me.atualizarPreco(sMarca, sCodProduto, dPrecoTonelada, dCusto)
            End If
        Next

    End Sub


#End Region

#End Region

#Region "Despesas"

#Region "Frete"

#Region "Variáveis"

    Private objFrete As New ctrFrete
    Private sCodFrete As String
    Private iCodItinerario As Int32
    Private dValorFrete As Double

#End Region

#Region "Propriedades"

    Private Property CodFrete As String

        Get
            Return sCodFrete
        End Get

        Set(ByVal value As String)
            sCodFrete = value
            Me.preencherFrete(sCodFrete)
        End Set

    End Property

    Private Property CodItinerario As Int32

        Get
            Return iCodItinerario
        End Get

        Set(ByVal value As Int32)
            iCodItinerario = value
            preencherExpedicao(Me.CodFrete, iCodItinerario)
        End Set

    End Property

    Private Property ValorFrete As Decimal

        Get
            Return dValorFrete
        End Get

        Set(ByVal value As Decimal)
            dValorFrete = value
            Me.atualizarValoresFrete()
        End Set

    End Property

#End Region

#Region "Métodos privados"

    Private Sub pesquisarFrete()
        Dim sSql As String
        Dim frmDialogo As New frmPesquisa

        Try
            sSql = Me.objFrete.sqlConsulta()

            With frmDialogo
                .Sql = sSql
                .Titulo = "Pesquisar Frete"
                .CarregaTela()
                If .DS.Tables(0).Rows.Count > 0 Then
                    .ShowDialog()
                    If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                        Me.CodFrete = conversao.nuloParaVazio(.ID)
                    End If
                Else
                    MsgBox("Registro não encontrado", MsgBoxStyle.Exclamation, Me.Text)
                    Exit Sub
                End If
            End With

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)
        End Try

    End Sub

    Private Sub pesquisarExpedicao()
        Dim sSql As String
        Dim frmDialogo As New frmPesquisa

        Try
            sSql = Me.objFrete.sqlConsulta(Me.CodFrete)

            With frmDialogo
                .Sql = sSql
                .Titulo = "Pesquisar Expedicao"
                .CarregaTela()
                If .DS.Tables(0).Rows.Count > 0 Then
                    .ShowDialog()
                    If (.DialogResult = Windows.Forms.DialogResult.OK) Then
                        Me.CodItinerario = conversao.toInt32(.ID)
                        preencherExpedicao(Me.CodFrete, Me.CodItinerario)
                    End If
                Else
                    MsgBox("Registro não encontrado", MsgBoxStyle.Exclamation, Me.Text)
                    Exit Sub
                End If
            End With

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)
        End Try

    End Sub

    Private Sub preencherFrete(ByVal sCodFrete As String)
        Dim sDescItinerario As String

        Try
            txtCodFrete.Text = ""
            txtDescItinerario.Text = ""

            txtCodExpedicao.Text = ""
            txtDescExpedicao.Text = ""

            If sCodFrete <> String.Empty Then
                sDescItinerario = Me.objFrete.retornarDescItinerario(sCodFrete)

                If sDescItinerario <> String.Empty Then
                    txtCodFrete.Text = sCodFrete
                    txtDescItinerario.Text = sDescItinerario
                Else
                    MsgBox("Código não existente.", MsgBoxStyle.Information, Application.ProductName)
                    txtCodFrete.Text = ""
                    txtDescItinerario.Text = ""
                End If

                atualizarValoresFrete()
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)
        End Try
    End Sub

    Private Sub preencherExpedicao(ByVal sCodFrete As String,
                                   ByVal iCodExpedicao As Integer)

        Dim dtbExpedicao As DataTable

        Try

            txtCodExpedicao.Text = ""
            txtDescExpedicao.Text = ""
            txtValorFrete.Text = ""
            txtTotalFrete.Text = ""

            If sCodFrete.Trim <> String.Empty Then
                dtbExpedicao = Me.objFrete.retornarExpedicao(sCodFrete, iCodExpedicao)

                If Not dtbExpedicao Is Nothing Then
                    If dtbExpedicao.Rows.Count > 0 Then
                        txtCodExpedicao.Text = conversao.nuloParaVazio(dtbExpedicao.Rows(0).Item("tipoExp"))
                        txtDescExpedicao.Text = conversao.nuloParaVazio(dtbExpedicao.Rows(0).Item("tipoVeiculo"))
                        Me.ValorFrete = conversao.nuloParaZero(dtbExpedicao.Rows(0).Item("valor"))
                    End If

                Else
                    MsgBox("Código não existente.", MsgBoxStyle.Information, Application.ProductName)
                End If

            Else
                MsgBox("Selecione primeiramente o frete para pesquisa da expedição.", MsgBoxStyle.Information, Application.ProductName)
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)
        End Try

    End Sub

    Private Function calcularTotalFrete(ByVal dValorFrete As Decimal) As Decimal
        Dim dPesoProposta As Double

        Try
            dPesoProposta = Me.retornarPesoTotalProposta

            Return dPesoProposta * dValorFrete

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try
    End Function

    Private Sub calcularFreteProduto(ByVal dTotalFrete As Double)

        Dim dPesoTotal As Double
        Dim dPesoUnitario As Double
        Dim dValorFrete As Double
        Dim dQuantidade As Double
        Dim dValorFreteItem As Decimal
        Dim iUnidadeCalculo As Int32


        Try

            For Each drLinha As DataRow In dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Rows
                dQuantidade = conversao.nuloParaZero(drLinha.Item(ctrProduto.eColunasProdutos.QUANTIDADE))
                dPesoUnitario = conversao.nuloParaZero(drLinha.Item(ctrProduto.eColunasProdutos.PESO))
                dPesoTotal = conversao.nuloParaZero(drLinha.Item(ctrProduto.eColunasProdutos.PESO_TOTAL))
                iUnidadeCalculo = objProduto.retornaUnidadeCalculo(conversao.nuloParaVazio(drLinha.Item(ctrProduto.eColunasProdutos.UNIDADE)))
                dValorFreteItem = objFrete.retornarValorFrete(dPesoTotal, dTotalFrete)

                dValorFrete = objProduto.calcularFreteUnitarioProduto(dTotalFrete, dPesoUnitario, dQuantidade, iUnidadeCalculo)

                drLinha.BeginEdit()
                drLinha.Item("valorFrete") = dValorFrete
                drLinha.AcceptChanges()

            Next

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)
        End Try

    End Sub

    Private Sub atualizarValoresFrete()
        Dim dTotalFrete As Double

        Try

            Me.txtValorFrete.Text = Formatacao.formatValor(Me.ValorFrete)
            dTotalFrete = Me.calcularTotalFrete(Me.ValorFrete)
            Me.txtTotalFrete.Text = Formatacao.formatValor(dTotalFrete)

            If chkFrete_comporPreco.Checked Then
                Me.calcularFreteProduto(Me.ValorFrete)
            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

#End Region

#Region "Eventos"

    Private Sub cmdSelecionarFrete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSelecionarFrete.Click

        Me.pesquisarFrete()

    End Sub

    Private Sub chkFrete_comporPreco_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkFrete_comporPreco.CheckedChanged

        If chkFrete_comporPreco.Checked Then
            Me.calcularFreteProduto(Me.ValorFrete)
        Else
            Me.calcularFreteProduto(0)
        End If

    End Sub

    Private Sub cmdCalcularFrete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdCalcularFrete.Click

        Me.ValorFrete = conversao.toDecimal(Me.txtValorFrete.Text)

    End Sub

    Private Sub cmdSelecionarExpedicao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSelecionarExpedicao.Click

        Me.pesquisarExpedicao()

    End Sub

#End Region

#End Region

#Region "Comissão"

#Region "Eventos"

    Private Sub txtPercComissao_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtPercComissao.Leave

        Me.txtPercComissao.Text = Formatacao.formatValor(conversao.toDecimal(Me.txtPercComissao.Text))

    End Sub

#End Region
#End Region

#Region "Outras Despesas"

#Region "Métodos Privados"

    Private Sub configurarGridOutrasDespesas()

        Try

            With dgvOutrasDespesas
                .DataSource = Nothing
                .AutoGenerateColumns = False
                .AllowUserToAddRows = False
                .AllowUserToResizeColumns = False
                .AllowUserToResizeRows = False
                .Columns.Clear()

                Dim colCodDespesa As New DataGridViewTextBoxColumn()
                With colCodDespesa
                    .HeaderText = "CodDespesa"
                    .DataPropertyName = "codDespesa"
                    .ReadOnly = True
                    .Visible = False
                    .ValueType = System.Type.GetType("System.integer")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colCodDespesa)

                Dim colDespesa As New DataGridViewTextBoxColumn()
                With colDespesa
                    .HeaderText = "Despesa"
                    .DataPropertyName = "descricao"
                    .ReadOnly = True
                    .Visible = True
                    .Width = 655
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                    .ValueType = System.Type.GetType("System.string")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colDespesa)

                Dim colValor As New DataGridViewTextBoxColumn()
                With colValor
                    .HeaderText = "Valor"
                    .DataPropertyName = "valor"
                    .Visible = True
                    .Width = 120
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .ValueType = System.Type.GetType("System.decimal")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colValor)

                Dim colGerarReceita As New DataGridViewCheckBoxColumn()
                With colGerarReceita
                    .HeaderText = "Gerar Receita"
                    .DataPropertyName = "gerarReceita"
                    .Visible = True
                    .Width = 90
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                    .ValueType = System.Type.GetType("System.boolean")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colGerarReceita)

                Dim colValorReceita As New DataGridViewTextBoxColumn()
                With colValorReceita
                    .HeaderText = "ValorReceita"
                    .DataPropertyName = "valorReceita"
                    .Visible = False
                    .Width = 120
                    .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                    .ValueType = System.Type.GetType("System.decimal")
                    .SortMode = DataGridViewColumnSortMode.NotSortable
                End With
                .Columns.Add(colValorReceita)

            End With

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub preencherGridOutrasDespesas()
        Dim datDespesas As DataTable
        Dim objDespesas As New ctrDespesa
        Dim iLinha As Integer = 0

        Try
            dgvOutrasDespesas.DataSource = Nothing
            datDespesas = objDespesas.selecionarDespesas(ctrDespesa.eTipoDespesa.VALOR_MANUAL)

            dsProposta.Tables(ctrProposta.eTabelas.OUTRAS_DESPESAS).Load(datDespesas.CreateDataReader)
            dgvOutrasDespesas.DataSource = dsProposta.Tables(ctrProposta.eTabelas.OUTRAS_DESPESAS)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

#End Region

#Region "Eventos"

    Private Sub dgvOutrasDespesas_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvOutrasDespesas.CellEndEdit
        Try

            If e.RowIndex >= 0 Then

                If e.ColumnIndex = ctrDespesa.eColunasDespesa.VALOR Then

                    dgvOutrasDespesas.Item(e.ColumnIndex, e.RowIndex).Value = Formatacao.formatValor(dgvOutrasDespesas.Item(e.ColumnIndex, e.RowIndex).Value)

                End If

            End If

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try
    End Sub

#End Region

#End Region

#End Region

#Region "Proposta"

#Region "Variáveis"

    Private objImposto As New ctrImposto

#End Region

#Region "Enumerações"

    Private Enum eProposta
        IDRegiao = 0
        check = 1
        item = 2
        codProduto = 3
        produto = 4
        quantidade = 5
        unidade = 6
        pesoUnitario = 7
        pesoTotal = 8
        precoUnitario = 9
        precoTotal = 10
        localFaturamento = 11
        IPI = 12
        ERegiao = 13
    End Enum

#End Region

#Region "Métodos Privados"

    Private Sub configurarGridProposta()

        With dgvProposta
            .DataSource = Nothing
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToResizeColumns = False
            .AllowUserToResizeRows = False
            .Columns.Clear()

            Dim colRegiao As New DataGridViewTextBoxColumn()
            With colRegiao
                .HeaderText = "idRegiao"
                .DataPropertyName = "IDRegiao"
                .ReadOnly = True
                .Visible = False
                .Frozen = True
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colRegiao)

            Dim colCheck As New DataGridViewCheckBoxColumn()
            With colCheck
                .HeaderText = ""
                .DataPropertyName = "check"
                .ReadOnly = False
                .Visible = True
                .Frozen = True
                .Width = 20
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .ValueType = System.Type.GetType("System.boolean")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colCheck)

            Dim colItem As New DataGridViewTextBoxColumn()
            With colItem
                .HeaderText = "Item"
                .DataPropertyName = "Item"
                .ReadOnly = True
                .Visible = True
                .Frozen = True
                .Width = 30
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .ValueType = System.Type.GetType("System.integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colItem)


            Dim colCodProduto As New DataGridViewTextBoxColumn()
            With colCodProduto
                .HeaderText = "Código"
                .DataPropertyName = "CodProduto"
                .ReadOnly = True
                .Visible = True
                .Frozen = True
                .Width = 60
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colCodProduto)

            Dim colProduto As New DataGridViewTextBoxColumn()
            With colProduto
                .HeaderText = "Produto"
                .DataPropertyName = "Produto"
                .ReadOnly = True
                .Visible = True
                .Frozen = True
                .Width = 250
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colProduto)

            Dim colQuantidade As New DataGridViewTextBoxColumn()
            With colQuantidade
                .HeaderText = "Quant."
                .DataPropertyName = "Quantidade"
                .ReadOnly = True
                .Visible = True
                .Frozen = True
                .Width = 50
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colQuantidade)

            Dim colUnidade As New DataGridViewTextBoxColumn()
            With colUnidade
                .HeaderText = "Unid."
                .DataPropertyName = "Unidade"
                .ReadOnly = True
                .Visible = True
                .Width = 35
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colUnidade)


            Dim colPesoUnitario As New DataGridViewTextBoxColumn()
            With colPesoUnitario
                .HeaderText = "Peso"
                .DataPropertyName = "PesoUnit"
                .ReadOnly = True
                .Visible = True
                .Width = 60
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPesoUnitario)

            Dim colPesoTotal As New DataGridViewTextBoxColumn()
            With colPesoTotal
                .HeaderText = "Peso Total"
                .DataPropertyName = "pesoTotal"
                .ReadOnly = True
                .Visible = True
                .Width = 85
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPesoTotal)

            Dim colPrecoUnitario As New DataGridViewTextBoxColumn()
            With colPrecoUnitario
                .HeaderText = "Preço"
                .DataPropertyName = "preco"
                .ReadOnly = True
                .Visible = True
                .Width = 80
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPrecoUnitario)

            Dim colPrecoTotal As New DataGridViewTextBoxColumn()
            With colPrecoTotal
                .HeaderText = "Preço Total"
                .DataPropertyName = "precoTotal"
                .ReadOnly = True
                .Visible = True
                .Width = 85
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPrecoTotal)

            Dim colFaturamento As New DataGridViewTextBoxColumn()
            With colFaturamento
                .HeaderText = "Faturamento"
                .DataPropertyName = "Faturamento"
                .ReadOnly = True
                .Visible = True
                .Width = 100
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colFaturamento)

            Dim colIPI As New DataGridViewTextBoxColumn()
            With colIPI
                .HeaderText = "IPI"
                .DataPropertyName = "IPI"
                .ReadOnly = True
                .Visible = True
                .Width = 30
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colIPI)

            Dim colERegiao As New DataGridViewTextBoxColumn()
            With colERegiao
                .HeaderText = "É Região"
                .DataPropertyName = "ERegiao"
                .ReadOnly = True
                .Visible = False
                .Width = 30
                .ValueType = System.Type.GetType("System.Boolean")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colERegiao)

        End With

    End Sub

    Private Sub preencherGridProposta()
        Dim sRegiaoAtual As String = ""
        Dim sRegiao As String = ""
        Dim sCodProduto As String = ""
        Dim iLinha As Integer = 0
        Dim iCodRegiao As Integer = 0
        Dim dQuantidade, dPreco, dPrecoUnitario, dFrete, dForma, dPrecoTotal As Double
        Dim iModalidadeVenda As ctrImposto.eModalidadeVenda
        Dim dIPI As Double = 0
        Dim drItens As DataRow()
        Dim dValorProposta As Double = 0
        Dim dPesoProposta As Double = 0

        Dim F As New System.Drawing.Font("Microsoft Sans Serif", 8.25)

        Try
            dgvProposta.Rows.Clear()

            For Each drLinha As DataRow In dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Rows
                dgvProposta.Rows.Add()

                sRegiao = conversao.nuloParaVazio(drLinha.Item("Regiao"))
                iCodRegiao = conversao.nuloParaZero(drLinha.Item("codRegiao"))

                dgvProposta.Item(eProposta.produto, iLinha).Value = sRegiao.Trim.ToUpper
                dgvProposta.Item(eProposta.produto, iLinha).Style.Font = F
                dgvProposta.Item(eProposta.produto, iLinha).Style.Font = New System.Drawing.Font(F, FontStyle.Bold)
                dgvProposta.Item(eProposta.produto, iLinha).Style.Alignment = DataGridViewContentAlignment.MiddleCenter
                dgvProposta.Rows(iLinha).DefaultCellStyle.BackColor = ColorTranslator.FromOle(RGB(230, 240, 236))
                dgvProposta.Item(eProposta.ERegiao, iLinha).Value = True
                dgvProposta.Rows.Add()
                iLinha += 1

                drItens = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("CodRegiao=" & iCodRegiao)
                For Each drProduto As DataRow In drItens
                    dgvProposta.Rows.Add()

                    sCodProduto = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.COD_PRODUTO))
                    dgvProposta.Item(eProposta.codProduto, iLinha).Value = sCodProduto

                    dgvProposta.Item(eProposta.produto, iLinha).Value = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.PRODUTO))
                    dQuantidade = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.QUANTIDADE))
                    dgvProposta.Item(eProposta.quantidade, iLinha).Value = dQuantidade
                    dgvProposta.Item(eProposta.localFaturamento, iLinha).Value = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.FATURAMENTO))
                    dIPI = conversao.toDecimal(drProduto.Item(ctrProduto.eColunasProdutos.IPI))
                    dgvProposta.Item(eProposta.IPI, iLinha).Value = Formatacao.formatValor(dIPI)
                    dgvProposta.Item(eProposta.unidade, iLinha).Value = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.UNIDADE))

                    'Peso
                    dgvProposta.Item(eProposta.pesoUnitario, iLinha).Value = Formatacao.formatPeso(drProduto.Item(ctrProduto.eColunasProdutos.PESO), 3)
                    dPesoProposta += conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.PESO_TOTAL))
                    dgvProposta.Item(eProposta.pesoTotal, iLinha).Value = Format(Convert.ToDouble(drProduto.Item(ctrProduto.eColunasProdutos.PESO_TOTAL)), "#,##0.00")

                    'Cálculo do valor unitário do produto
                    dPreco = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_UNITARIO))
                    dFrete = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_FRETE))
                    dForma = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_FORMA))
                    dPrecoUnitario = dPreco + dForma + dFrete

                    If Not chkSemImposto.Checked Then
                        If optConsumoProprio.Checked Then
                            iModalidadeVenda = ctrImposto.eModalidadeVenda.CONSUMO_PROPRIO
                        ElseIf optIndustrializacao.Checked Then
                            iModalidadeVenda = ctrImposto.eModalidadeVenda.INDUSTRIALIZACAO
                        End If

                        'dValorUnitarioImposto = Me.objImposto.calcularValorImposto(iModalidadeVenda, dPrecoUnitario, Me.dICMS, dIPI)

                    End If

                    'Cálculo do Preço Total do Item
                    dPrecoTotal = conversao.toDecimal(Formatacao.formatValor(dPrecoUnitario)) * dQuantidade

                    dgvProposta.Item(eProposta.precoUnitario, iLinha).Value = Format(Convert.ToDouble(dPrecoUnitario), "#,##0.00")
                    dgvProposta.Item(eProposta.precoTotal, iLinha).Value = Format(Convert.ToDouble(dPrecoTotal), "#,##0.00")

                    dValorProposta += dPrecoTotal

                    iLinha += 1

                Next

                'Produtos de terceiros
                drItens = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("CodRegiao=" & iCodRegiao)

                If drItens.Length > 0 Then

                    For Each drTerceiros As DataRow In drItens
                        dgvProposta.Rows.Add()
                        dgvProposta.Item(eProposta.codProduto, iLinha).Value = conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRODUTO))
                        dgvProposta.Item(eProposta.produto, iLinha).Value = "Terceiros: " & conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.MARCA)) & " - " &
                                                                            conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.FORMATO))
                        dgvProposta.Item(eProposta.unidade, iLinha).Value = conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.UNIDADE))
                        dgvProposta.Item(eProposta.quantidade, iLinha).Value = conversao.nuloParaZero(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.QUANTIDADE))
                        dgvProposta.Item(eProposta.precoUnitario, iLinha).Value = Format(Convert.ToDouble(conversao.nuloParaZero(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRECO_UNITARIO))), "#,##0.00")
                        dgvProposta.Item(eProposta.precoTotal, iLinha).Value = Format(Convert.ToDouble(conversao.nuloParaZero(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL))), "#,##0.00")

                        dValorProposta += conversao.nuloParaZero(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL))

                        iLinha += 1
                    Next

                End If

                'Inserir fôrmas 
                drItens = dsProposta.Tables(ctrProposta.eTabelas.FORMA).Select("diluir = false AND CodRegiao=" & iCodRegiao)
                If drItens.Length > 0 Then

                    For Each drItensForma As DataRow In drItens
                        dgvProposta.Rows.Add()
                        dgvProposta.Item(eProposta.produto, iLinha).Value = "Fôrma: " & conversao.nuloParaVazio(drItensForma.Item(ctrForma.eColunasForma.FORMA))
                        dgvProposta.Item(eProposta.precoUnitario, iLinha).Value = Format(Convert.ToDouble(conversao.nuloParaZero(drItensForma.Item(ctrForma.eColunasForma.VALOR_FORMA))), "#,##0.00")
                        dgvProposta.Item(eProposta.precoTotal, iLinha).Value = Format(Convert.ToDouble(conversao.nuloParaZero(drItensForma.Item(ctrForma.eColunasForma.VALOR_FORMA))), "#,##0.00")

                        dValorProposta += conversao.nuloParaZero(drItensForma.Item(ctrForma.eColunasForma.VALOR_FORMA))

                        iLinha += 1
                    Next

                End If

            Next

            txtValorTotal.Text = Formatacao.formatValor(dValorProposta)
            txtPesoTotalProposta.Text = Formatacao.formatPeso(dPesoProposta, 3)

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub visualizarProposta()
        Dim objRelProposta As New Relatorios.relProposta
        Dim datRelatorio As New Relatorios.dtsPropostaMI.datProdutosDataTable
        Dim datModeloRel As New DataTable

        Dim drLinhaRel As DataRow
        Dim drItens As DataRow()
        Dim sCotacao As String = String.Empty

        Dim sRegiao As String
        Dim iCodRegiao As Int32

        Dim dPrecoUnitario As Decimal
        Dim dQuantidade As Double
        Dim dPreco As Decimal
        Dim dPrecoTotal As Decimal
        Dim dFrete As Decimal
        Dim dForma As Decimal

        Try
            datModeloRel = datRelatorio.Clone

            For Each drLinha As DataRow In dsProposta.Tables(ctrProposta.eTabelas.REGIAO).Rows

                sRegiao = conversao.nuloParaVazio(drLinha.Item("Regiao"))
                iCodRegiao = conversao.nuloParaZero(drLinha.Item("codRegiao"))

                drItens = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("CodRegiao=" & iCodRegiao)
                For Each drProduto As DataRow In drItens
                    drLinhaRel = datModeloRel.NewRow

                    With drLinhaRel
                        .Item("numItem") = datModeloRel.Rows.Count + 1
                        .Item("codRegiao") = iCodRegiao
                        .Item("regiao") = sRegiao.Trim
                        .Item("Terceiros") = False

                        .Item("CodProduto") = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.COD_PRODUTO))
                        .Item("DescProduto") = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.PRODUTO))
                        .Item("Unidade") = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.UNIDADE))
                        dQuantidade = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.QUANTIDADE))
                        .Item("Quantidade") = dQuantidade
                        .Item("NCM") = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.NCM))
                        .Item("IPI") = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.IPI))
                        .Item("Faturamento") = conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.FATURAMENTO))
                        .Item("PesoUnitario") = Formatacao.formatPeso(conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.PESO)), 3)
                        .Item("PesoTotal") = Formatacao.formatPeso(conversao.nuloParaVazio(drProduto.Item(ctrProduto.eColunasProdutos.PESO_TOTAL)), 3)

                        'Cálculo do valor unitário do produto
                        dPreco = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_UNITARIO))
                        dFrete = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_FRETE))
                        dForma = conversao.nuloParaZero(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_FORMA))
                        dPrecoUnitario = dPreco + dForma + dFrete
                        .Item("PreçoUnitario") = Formatacao.formatValor(Convert.ToDouble(conversao.nuloParaZero(dPrecoUnitario)))

                        'Cálculo do Preço Total do Item
                        dPrecoTotal = dPrecoUnitario * dQuantidade
                        .Item("PreçoTotal") = Formatacao.formatValor(Convert.ToDouble(conversao.nuloParaZero(dPrecoTotal)))
                    End With

                    datModeloRel.Rows.Add(drLinhaRel)

                Next

                'Produtos de terceiros
                drItens = dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Select("CodRegiao=" & iCodRegiao)
                For Each drTerceiros As DataRow In drItens
                    drLinhaRel = datModeloRel.NewRow

                    With drLinhaRel
                        .Item("numItem") = datModeloRel.Rows.Count + 1
                        .Item("codRegiao") = iCodRegiao
                        .Item("regiao") = sRegiao.Trim
                        .Item("Terceiros") = True
                        .Item("codProduto") = conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRODUTO))
                        .Item("descProduto") = "Terceiros: " & conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.MARCA)) & " - " &
                                                               conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.FORMATO))
                        .Item("Unidade") = conversao.nuloParaVazio(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.UNIDADE))
                        .Item("Quantidade") = conversao.nuloParaZero(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.QUANTIDADE))
                        .Item("PreçoUnitario") = Format(Convert.ToDouble(conversao.nuloParaZero(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRECO_UNITARIO))), "#,##0.00")
                        .Item("PreçoTotal") = Format(Convert.ToDouble(conversao.nuloParaZero(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL))), "#,##0.00")
                    End With

                    datModeloRel.Rows.Add(drLinhaRel)

                Next

                'Inserir fôrmas 
                drItens = dsProposta.Tables(ctrProposta.eTabelas.FORMA).Select("diluir = false AND CodRegiao=" & iCodRegiao)
                For Each drItensForma As DataRow In drItens
                    drLinhaRel = datModeloRel.NewRow

                    With drLinhaRel
                        .Item("numItem") = datModeloRel.Rows.Count + 1
                        .Item("codRegiao") = iCodRegiao
                        .Item("regiao") = sRegiao.Trim
                        .Item("Terceiros") = False
                        .Item("DescProduto") = "Fôrma: " & conversao.nuloParaVazio(drItensForma.Item(ctrForma.eColunasForma.FORMA))
                        .Item("PreçoUnitario") = Format(Convert.ToDouble(conversao.nuloParaZero(drItensForma.Item(ctrForma.eColunasForma.VALOR_FORMA))), "#,##0.00")
                        .Item("PreçoTotal") = Format(Convert.ToDouble(conversao.nuloParaZero(drItensForma.Item(ctrForma.eColunasForma.VALOR_FORMA))), "#,##0.00")
                    End With

                    datModeloRel.Rows.Add(drLinhaRel)

                Next
            Next

            If Me.txtCodCotacao.Text.Trim <> String.Empty Then
                sCotacao = CInt(Me.cboSegmento.SelectedValue) & "-" & Me.txtCodCotacao.Text & "/" & Me.txtRevisao.Text.Trim
            End If
            With objRelProposta
                .Cotacao = sCotacao
                .Cliente = Me.txtCliente.Text.Trim.ToUpper
                .DataProposta = Me.dtpData.Value
                .DataValidade = Me.dtpValidade.Value
                .Solicitacao = Me.txtSolicitacao.Text.Trim
                .Consulta = Me.txtReferencia.Text.Trim
                .Observacoes = Me.txtObservacoes.Text

                .PermiteImprimir = Me.iCodProposta <> 0

                .DatRelatorio = datModeloRel
            End With

            objRelProposta.Show()

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub


#End Region

#Region "Eventos"

    Private Sub tpProposta_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tpProposta.Enter
        Try
            Me.preencherGridProposta()
        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)


        End Try


    End Sub

    Private Sub cmdVisualizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdVisualizar.Click

        Me.visualizarProposta()

    End Sub


#End Region

#End Region

#Region "Condições Comerciais"

#Region "Eventos"

    Private Sub optCIP_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optCIP.CheckedChanged

        grpFrete.Enabled = optCIP.Checked

    End Sub

    Private Sub optFCA_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles optFCA.CheckedChanged

        grpFrete.Enabled = optCIP.Checked

    End Sub

#End Region

#End Region

#Region "Resultado"

#Region "Enumerações"

    Private Enum eDespesas
        codDespesa = 0
        despesa = 1
        valor = 2
    End Enum

    Private Enum eReceitaBruta
        receita = 0
        valor = 1
    End Enum

    Private Enum eCustos
        custo = 0
        valor = 1
    End Enum

    Private Enum eColResultado As Int32
        MARCA = 0
        QUANTIDADE = 1
        PRECO_TONELADA = 2
        PRECO_TOTAL = 3
        CUSTO_TONELADA = 4
        FORMA_IMNUTIDA = 5
        MARGEM_BRUTA = 6
        MARGEM_CONTRIBUICAO = 7

    End Enum

#End Region

#Region "Métodos Privados"

    Private Sub configurarGridDespesas()

        With dgvDespesas
            .DataSource = Nothing
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToResizeColumns = False
            .AllowUserToResizeRows = False
            .Columns.Clear()

            Dim colCodDespesa As New DataGridViewTextBoxColumn()
            With colCodDespesa
                .HeaderText = "codDespesa"
                .DataPropertyName = "codDespesa"
                .ReadOnly = True
                .Visible = False
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.integer")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colCodDespesa)

            Dim colDespesa As New DataGridViewTextBoxColumn()
            With colDespesa
                .HeaderText = "Despesa"
                .DataPropertyName = "Despesa"
                .ReadOnly = True
                .Visible = True
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colDespesa)

            Dim colValor As New DataGridViewTextBoxColumn()
            With colValor
                .HeaderText = "Valor"
                .DataPropertyName = "valor"
                .Visible = True
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colValor)

        End With

    End Sub

    Private Sub configurarGridReceitaBruta()

        With dgvReceitaBruta
            .DataSource = Nothing
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToResizeColumns = False
            .AllowUserToResizeRows = False
            .Rows.Clear()
            .Columns.Clear()

            Dim colReceita As New DataGridViewTextBoxColumn()
            With colReceita
                .HeaderText = "Receita"
                .DataPropertyName = "receita"
                .ReadOnly = True
                .Visible = True
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colReceita)

            Dim colValor As New DataGridViewTextBoxColumn()
            With colValor
                .HeaderText = "Valor"
                .DataPropertyName = "valor"
                .Visible = True
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colValor)

        End With

    End Sub

    Private Sub configurarGridCustos()

        With dgvCusto
            .DataSource = Nothing
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToResizeColumns = False
            .AllowUserToResizeRows = False
            .Columns.Clear()

            Dim colCusto As New DataGridViewTextBoxColumn()
            With colCusto
                .HeaderText = "Custo"
                .DataPropertyName = "custo"
                .ReadOnly = True
                .Visible = True
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colCusto)

            Dim colValor As New DataGridViewTextBoxColumn()
            With colValor
                .HeaderText = "Valor"
                .DataPropertyName = "valor"
                .Visible = True
                .Width = 120
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colValor)

        End With
    End Sub

    Private Sub configurarGridResultado()
        With dgvResultado
            .DataSource = Nothing
            .AutoGenerateColumns = False
            .AllowUserToAddRows = False
            .AllowUserToResizeColumns = False
            .AllowUserToResizeRows = False
            .Columns.Clear()

            Dim colMarca As New DataGridViewTextBoxColumn()
            With colMarca
                .HeaderText = "Marca"
                .DataPropertyName = "Marca"
                .ReadOnly = True
                .Visible = True
                .Width = 225
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
                .ValueType = System.Type.GetType("System.string")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colMarca)

            Dim colQuantidade As New DataGridViewTextBoxColumn()
            With colQuantidade
                .HeaderText = "Quant."
                .DataPropertyName = "quantidade"
                .Visible = True
                .Width = 70
                .ReadOnly = True
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colQuantidade)

            Dim colPrecoTon As New DataGridViewTextBoxColumn()
            With colPrecoTon
                .HeaderText = "Preço Unit."
                .DataPropertyName = "precoUnit"
                .Visible = True
                .Width = 85
                .ReadOnly = True
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPrecoTon)

            Dim colPrecoTotal As New DataGridViewTextBoxColumn()
            With colPrecoTotal
                .HeaderText = "Preço Total"
                .DataPropertyName = "precoTotal"
                .Visible = True
                .Width = 100
                .ReadOnly = True
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colPrecoTotal)

            Dim colcustoTonel As New DataGridViewTextBoxColumn()
            With colcustoTonel
                .HeaderText = "Custo"
                .DataPropertyName = "custo"
                .Visible = True
                .Width = 85
                .ReadOnly = True
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colcustoTonel)

            Dim colformaDiluida As New DataGridViewTextBoxColumn()
            With colformaDiluida
                .HeaderText = "Fôrma"
                .DataPropertyName = "Fôrma"
                .Visible = True
                .Width = 90
                .ReadOnly = True
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colformaDiluida)

            Dim colMargemBruta As New DataGridViewTextBoxColumn()
            With colMargemBruta
                .HeaderText = "Margem Bruta"
                .DataPropertyName = "margemBruta"
                .Visible = True
                .Width = 100
                .ReadOnly = True
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colMargemBruta)

            Dim colMargemContr As New DataGridViewTextBoxColumn()
            With colMargemContr
                .HeaderText = "Margem Contr."
                .DataPropertyName = "margemContr"
                .Visible = True
                .Width = 100
                .ReadOnly = True
                .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
                .ValueType = System.Type.GetType("System.double")
                .SortMode = DataGridViewColumnSortMode.NotSortable
            End With
            .Columns.Add(colMargemContr)


        End With
    End Sub

    Private Function totalizarValorForma() As Decimal
        Dim dTotalFormas As Decimal = 0

        Try

            For Each drForma As DataRow In dsProposta.Tables(ctrProposta.eTabelas.FORMA).Rows
                If Not conversao.toBoolean(drForma.Item(ctrForma.eColunasForma.DILUIR)) Then
                    dTotalFormas += conversao.toDecimal(drForma.Item(ctrForma.eColunasForma.VALOR_FORMA))
                End If
            Next

            Return dTotalFormas

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Function

    Private Sub totalizarProposta(ByRef dTotalForma As Decimal,
                                  ByRef dTotalRefratarios As Decimal,
                                  ByRef dTotalRoyalties As Decimal,
                                  ByRef dTotalTerceiros As Decimal,
                                  ByRef dCustoRefratarios As Decimal,
                                  ByRef dCustoTerceiros As Decimal)
        Try
            Dim dValorUnitario As Decimal = 0
            Dim dQuantidade As Double = 0
            Dim dQuantTotal As Double = 0
            Dim dFormaDiluida As Decimal = 0
            Dim dFreteDiluido As Decimal = 0
            Dim dValorImposto As Decimal = 0
            Dim dCustoItem As Decimal = 0

            dTotalProposta = 0
            dTotalForma = 0
            dTotalRefratarios = 0
            dTotalRoyalties = 0
            dTotalTerceiros = 0
            dCustoRefratarios = 0
            dCustoTerceiros = 0

            'Calcular totais referentes a refratários
            For Each drProduto As DataRow In dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Rows
                dValorUnitario = conversao.toDecimal(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_UNITARIO))
                dQuantidade = conversao.toDecimal(drProduto.Item(ctrProduto.eColunasProdutos.QUANTIDADE))
                dFormaDiluida = conversao.toDecimal(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_FORMA))
                dFreteDiluido = conversao.toDecimal(drProduto.Item(ctrProduto.eColunasProdutos.VALOR_FRETE))
                dCustoItem = conversao.toDecimal(drProduto.Item(ctrProduto.eColunasProdutos.CUSTO_UNITARIO))
                dCustoRefratarios += dCustoItem * dQuantidade
                dTotalRefratarios += (dValorUnitario + dFormaDiluida + dFreteDiluido) * dQuantidade
            Next

            'Calcular totais referentes a terceiros
            For Each drTerceiros As DataRow In dsProposta.Tables(ctrProposta.eTabelas.TERCEIROS).Rows
                dTotalTerceiros += conversao.toDecimal(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.PRECO_TOTAL))
                dCustoTerceiros += conversao.toDecimal(drTerceiros.Item(ctrTerceiros.eColunasTerceiros.CUSTO_TOTALL))
            Next

            'Calcular total de fôrmas
            dTotalForma = Me.totalizarValorForma

            Me.dTotalProposta = dTotalRefratarios + dTotalTerceiros + dTotalForma

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Function atualizarResumoDespesas(ByVal dForma As Decimal, ByVal dRoyalties As Decimal) As Decimal

        Dim dFrete As Double
        Dim dComissão As Double
        Dim dDespesas As Double = 0
        Dim dTotalDespesa As Double = 0

        Try

            dFrete = conversao.toDecimal(Me.txtTotalFrete.Text)
            dComissão = conversao.toDecimal(Me.txtComissao.Text)

            dgvDespesas.RowCount = 4 + dgvOutrasDespesas.RowCount
            dgvDespesas.Item(eDespesas.despesa, ctrDespesa.eDespesasFixas.FRETE).Value = "Fretes"
            dgvDespesas.Item(eDespesas.valor, ctrDespesa.eDespesasFixas.FRETE).Value = Format(Convert.ToDouble(dFrete), "#,##0.00")
            dgvDespesas.Item(eDespesas.despesa, ctrDespesa.eDespesasFixas.FORMAS).Value = "Fôrmas"
            dgvDespesas.Item(eDespesas.valor, ctrDespesa.eDespesasFixas.FORMAS).Value = Format(Convert.ToDouble(dForma), "#,##0.00")
            dgvDespesas.Item(eDespesas.despesa, ctrDespesa.eDespesasFixas.COMISSOES).Value = "Comissões"
            dgvDespesas.Item(eDespesas.valor, ctrDespesa.eDespesasFixas.COMISSOES).Value = Format(Convert.ToDouble(dComissão), "#,##0.00")
            dgvDespesas.Item(eDespesas.despesa, ctrDespesa.eDespesasFixas.ROYALTIES).Value = "Royalties"
            dgvDespesas.Item(eDespesas.valor, ctrDespesa.eDespesasFixas.ROYALTIES).Value = Format(Convert.ToDouble(dRoyalties), "#,##0.00")

            For i As Integer = 0 To dgvOutrasDespesas.RowCount - 1
                dgvDespesas.Item(eDespesas.despesa, i + 4).Value = dgvOutrasDespesas.Item(eDespesas.despesa, i).FormattedValue
                dgvDespesas.Item(eDespesas.valor, i + 4).Value = Format(Convert.ToDouble(conversao.toDecimal(dgvOutrasDespesas.Item(eDespesas.valor, i).FormattedValue)), "#,##0.00")
                dTotalDespesa = conversao.toDecimal(dgvOutrasDespesas.Item(eDespesas.valor, i).FormattedValue)
            Next

            dDespesas = dTotalDespesa + dFrete + dForma + dComissão + dRoyalties

            Return dDespesas

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Function

    Private Function atualizarResumoReceitas(ByVal dTotalRefratarios As Decimal,
                                        ByVal dTotalTerceiros As Decimal,
                                        ByVal dTotalFormas As Decimal) As Decimal
        Dim dblTotalReceitas As Double
        Dim dDespesas As Decimal
        Try

            dgvReceitaBruta.Rows.Clear()

            dgvReceitaBruta.RowCount = 2
            'Insere descrições de receitas
            dgvReceitaBruta.Item(eReceitaBruta.receita, ctrProposta.eReceitaBruta.RefratariosFormas).Value = "Refratários e Fôrmas"
            dgvReceitaBruta.Item(eReceitaBruta.receita, ctrProposta.eReceitaBruta.MateriaisTerceiros).Value = "Materiais de terceiros"

            'Insere valores das receitas
            dgvReceitaBruta.Item(eReceitaBruta.valor, ctrProposta.eReceitaBruta.RefratariosFormas).Value = Format(Convert.ToDouble(dTotalRefratarios + dTotalFormas), "#,##0.00")
            dgvReceitaBruta.Item(eReceitaBruta.valor, ctrProposta.eReceitaBruta.MateriaisTerceiros).Value = Format(Convert.ToDouble(dTotalTerceiros), "#,##0.00")

            'Insere valores de outras despesas marcadas com gerar receita
            For Each drGrid As DataRow In dsProposta.Tables(ctrProposta.eTabelas.OUTRAS_DESPESAS).Rows
                If conversao.toBoolean(drGrid.Item(ctrDespesa.eColunasDespesa.GERAR_RECEITA)) Then
                    dgvReceitaBruta.Rows.Add()
                    dgvReceitaBruta.Item(eReceitaBruta.receita, dgvReceitaBruta.RowCount - 1).Value = conversao.nuloParaVazio(drGrid.Item(ctrDespesa.eColunasDespesa.DESC_DESPESA))
                    dDespesas = conversao.toDecimal(drGrid.Item(ctrDespesa.eColunasDespesa.VALOR))
                    dgvReceitaBruta.Item(eReceitaBruta.valor, dgvReceitaBruta.RowCount - 1).Value = Formatacao.formatValor(dDespesas)
                End If
            Next

            dblTotalReceitas = dTotalRefratarios + dTotalTerceiros + dTotalFormas + dDespesas

            Return dblTotalReceitas

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Function

    Private Function atualizarResumoCustos(ByVal dCustoRefratarios As Decimal,
                                           ByVal dCustoTerceiros As Decimal) As Decimal
        Dim dblTotalCusto As Decimal = 0
        Dim dblQuantidade As Double = 0

        Try
            With dgvCusto
                .RowCount = 2
                'Insere descrições de receitas
                .Item(eCustos.custo, ctrProposta.eCustosProposta.RefratariosFormas).Value = objProposta.descricaoCustoProposta(ctrProposta.eCustosProposta.RefratariosFormas)
                .Item(eCustos.custo, ctrProposta.eCustosProposta.MateriaisTerceiros).Value = objProposta.descricaoCustoProposta(ctrProposta.eCustosProposta.MateriaisTerceiros)

                'Insere valores das receitas
                'Calcula evolução custo
                dCustoRefratarios = Me.objProposta.calcularEvolucaoCusto(CDate(dtpData.Value), CDate(dtpDataEntrega.Value), dCustoRefratarios, conversao.toDecimal(Me.txtEvolucaoCusto.Text))

                .Item(eCustos.valor, ctrProposta.eCustosProposta.RefratariosFormas).Value = Format(Convert.ToDouble(dCustoRefratarios), "#,##0.00")
                .Item(eCustos.valor, ctrProposta.eCustosProposta.MateriaisTerceiros).Value = Format(Convert.ToDouble(dCustoTerceiros), "#,##0.00")
            End With

            dblTotalCusto = dCustoRefratarios + dCustoTerceiros

            Return dblTotalCusto

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Function

    Private Sub calcularResultadoProposta()
        Dim dTotalForma As Decimal
        Dim dTotalRefratarios As Decimal
        Dim dTotalRoyalties As Decimal
        Dim dTotalTerceiros As Decimal
        Dim dCustoRefratarios As Decimal
        Dim dCustoTerceiros As Decimal
        Dim dValorImposto As Decimal
        Dim dValorReceita As Decimal
        Dim dReceitaLiquida As Decimal
        Dim dValorCusto As Decimal
        Dim dLucroBruto As Decimal
        Dim dDespesas As Decimal

        Try
            Me.Cursor = Cursors.WaitCursor

            Me.totalizarProposta(dTotalForma,
                                 dTotalRefratarios,
                                 dTotalRoyalties,
                                 dTotalTerceiros,
                                 dCustoRefratarios,
                                 dCustoTerceiros)

            dValorReceita = Me.atualizarResumoReceitas(dTotalRefratarios, dTotalTerceiros, dTotalForma)
            dValorCusto = Me.atualizarResumoCustos(dCustoRefratarios, dCustoTerceiros)
            dDespesas = Me.atualizarResumoDespesas(dTotalForma, dTotalRoyalties)
            dValorImposto = Me.objImposto.calcularImposto(dTotalRefratarios, dTotalForma, Me.dICMS)

            Me.preencherGridResultado2()

            dReceitaLiquida = dValorReceita - dValorImposto

            dLucroBruto = dReceitaLiquida - dValorCusto

            Me.txtTotalDespesa.Text = Format(Convert.ToDouble(dDespesas), "#,##0.00")
            Me.txtReceitaBruta.Text = Formatacao.formatValor(dValorReceita)
            Me.txtPisCofins.Text = Formatacao.formatValor(dValorImposto)
            Me.txtRecOperacionalLiq.Text = Formatacao.formatValor(dReceitaLiquida)
            Me.txtTotalCusto.Text = Formatacao.formatValor(dValorCusto)
            Me.txtLucroBruto.Text = Formatacao.formatValor(dLucroBruto)
            If dReceitaLiquida > 0 Then
                Me.txtMargemBruta.Text = Formatacao.formatValor((dLucroBruto / dReceitaLiquida) * 100)
                Me.txtMargemContribuicao.Text = Formatacao.formatValor(((dLucroBruto - dDespesas) / dReceitaLiquida) * 100)
            End If

            Me.Cursor = Cursors.Default

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        Finally
            Me.Cursor = Cursors.Default
        End Try

    End Sub

    Public Sub preencherGridResultado()
        Dim sMarcaAtual As String = ""
        Dim sMarca As String = ""
        Dim dCusto As Decimal = 0
        Dim dCustoAtual As Decimal = 0
        Dim F As New System.Drawing.Font("Microsoft Sans Serif", 8.25)
        Dim datMarcas As New DataTable
        Dim datProdutos As New DataTable
        Dim dv As DataView
        Dim dQuantidade As Double = 0
        Dim dQuantidadeMarca As Double = 0
        Dim dPrecoTotal As Decimal = 0
        Dim dPreco As Decimal = 0
        Dim dPrecoMarca As Decimal = 0
        Dim sCodProduto As String = ""
        Dim sCodProdutoAtual As String = ""
        Dim sFiltro As String() = {"descMarca", "CustoMarca", "valorMarca"}
        Dim dFrete As Decimal = 0
        Dim dFormaDiluida As Decimal = 0
        Dim drForma As DataRow()

        Dim dFormaAParte As Decimal = 0
        Dim dPrecoAtual As Decimal = 0
        Dim dPrecoTotalMarca As Decimal = 0
        Dim dPrecoCheio As Decimal = 0

        Dim dLucroOperacional As Decimal = 0
        Dim dAjuste As Decimal = 0
        Dim dImposto As Decimal = 0
        Dim dRoyalties As Decimal = 0
        Dim dValorRoyalties As Decimal = 0
        Dim dCustoTotal As Decimal = 0

        Dim dFreteItem As Decimal = 0
        Dim dFreteTon As Decimal = 0
        Dim dCustoItem As Decimal = 0

        Dim dReceitaLiquida As Decimal = 0

        Dim dLucroBruto As Decimal = 0
        Dim bFreteComposto As Boolean
        Dim dImpostoMarca As Decimal = 0
        Dim dRoyaltiesMarca As Decimal = 0
        Dim dFormaMarca As Decimal = 0
        Dim dFreteMarca As Decimal = 0
        Dim dCustoMarca As Decimal = 0
        Dim dFormaDiluidaMarca As Decimal = 0
        Dim dCustoForma As Decimal



        Try

            bFreteComposto = chkFrete_comporPreco.Checked
            If bFreteComposto Then
                dFreteTon = conversao.toDecimal(Me.txtValorFrete.Text)
            End If

            dAjuste = objImposto.retornarAjusteImposto(Me.dICMS)

            dgvResultado.Rows.Clear()
            dv = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).DefaultView
            datMarcas = dv.ToTable(True, sFiltro)

            For Each drMarca As DataRow In datMarcas.Rows
                dPrecoTotalMarca = 0

                sMarca = drMarca.Item("descMarca")
                dCusto = conversao.toDecimal(drMarca.Item("CustoMarca"))
                dPrecoMarca = conversao.toDecimal(drMarca.Item("valorMarca"))

                dQuantidadeMarca = 0
                dPrecoTotalMarca = 0
                dRoyaltiesMarca = 0

                dgvResultado.Rows.Add()
                'Preencher Marca
                dgvResultado.Item(eColResultado.MARCA, dgvResultado.Rows.Count - 1).Value = sMarca
                dgvResultado.Item(eColResultado.CUSTO_TONELADA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dCusto)

                For Each drProdutos As DataRow In dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Rows

                    With drProdutos

                        sMarcaAtual = conversao.nuloParaVazio(.Item("descMarca"))
                        dCustoAtual = conversao.toDecimal(drMarca.Item("CustoMarca"))
                        dPrecoAtual = conversao.toDecimal(drMarca.Item("valorMarca"))
                        sCodProduto = conversao.nuloParaVazio(.Item("codProduto"))

                        If sMarca = sMarcaAtual And dCusto = dCustoAtual And dPrecoAtual = dPrecoMarca Then

                            dQuantidade = conversao.toDecimal(.Item("pesoTotal"))
                            dPreco = dPrecoAtual
                            dFormaDiluida = conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.VALOR_FORMA))

                            If bFreteComposto Then
                                dFreteItem = conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.VALOR_FRETE))
                            Else
                                dFrete = dFreteTon
                            End If

                            dPrecoCheio = dPreco + dFrete + dFormaDiluida

                            'Forma a parte
                            sCodProduto = conversao.nuloParaVazio(.Item("codProduto"))
                            drForma = dsProposta.Tables(ctrProposta.eTabelas.FORMA).Select("codProduto='" & sCodProduto & "'")
                            For Each dr As DataRow In drForma
                                If conversao.toBoolean(dr.Item("diluir")) Then
                                    dCustoForma = conversao.toDecimal(dr.Item("valorForma"))
                                Else
                                    dFormaAParte = conversao.toDecimal(dr.Item("valorForma"))
                                End If
                            Next

                            dPrecoTotal = dPrecoCheio * dQuantidade

                            dRoyalties = conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.ROYALTIES))
                            dValorRoyalties = (dRoyalties / 100) * dPrecoTotal
                            dCustoItem = conversao.toDecimal(.Item(ctrProduto.eColunasProdutos.CUSTO_UNITARIO))
                            dCustoItem = dCustoItem * dQuantidade

                            'Totalizadores da marca

                            dQuantidadeMarca += dQuantidade
                            dCustoMarca += dCustoItem
                            dPrecoTotalMarca += dPrecoTotal
                            dFreteMarca += dFreteItem
                            dFormaDiluidaMarca += dCustoForma
                            dFormaMarca += dFormaAParte
                            dImpostoMarca += objImposto.calcularImposto(dPreco, dFormaAParte, Me.dICMS)
                            dRoyaltiesMarca += dValorRoyalties
                        End If

                    End With

                Next

                dReceitaLiquida += dPrecoTotalMarca - dImposto

                dLucroBruto += dPrecoTotalMarca - dImposto - dCustoItem

                dLucroOperacional += dPrecoTotalMarca + dFormaMarca -
                                    (dFormaMarca / dAjuste) -
                                    dImpostoMarca - dFreteMarca -
                                    dRoyaltiesMarca - dCustoMarca

                dPrecoCheio = dPrecoMarca + dFreteTon + dFormaDiluidaMarca

                dgvResultado.Item(eColResultado.PRECO_TONELADA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dFormaDiluidaMarca)
                dgvResultado.Item(eColResultado.FORMA_IMNUTIDA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dFormaAParte * dAjuste)
                dgvResultado.Item(eColResultado.PRECO_TOTAL, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dPrecoTotalMarca)
                dgvResultado.Item(eColResultado.QUANTIDADE, dgvResultado.Rows.Count - 1).Value = dQuantidadeMarca

                dgvResultado.Item(eColResultado.MARGEM_BRUTA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor((dLucroBruto / dReceitaLiquida) * 100)
                dgvResultado.Item(eColResultado.MARGEM_CONTRIBUICAO, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor((dLucroOperacional / dReceitaLiquida) * 100)


            Next

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Public Sub preencherGridResultado2()
        'Selecionar Marcas
        Dim dv As New DataView
        Dim datMarcas As New DataTable
        Dim sFiltro As String() = {"descMarca", "CustoMarca", "valorMarca"}

        'Dados da Marca Selecionada
        Dim sMarca As String
        Dim dCustoTonelada As Decimal
        Dim dPrecoTonelada As Decimal

        'Produtos da marca
        Dim drProdutosMarca As DataRow()

        'Valores Produto
        Dim dQuantidadeProduto As Decimal

        Dim dFormaDiluidaProduto As Decimal
        Dim dFormaICMSProduto As Decimal
        Dim dFormaAParteProduto As Decimal
        Dim sCodProduto As Decimal
        Dim sRegiao As String
        Dim drFormas As DataRow()

        Dim bFreteComposto As Boolean
        Dim dFreteProduto As Decimal
        Dim dValorFreteProduto As Decimal

        Dim dPrecoCompostoProduto As Decimal
        Dim dPrecoTotalProduto As Decimal

        'Totalizadores da Marca
        Dim dQuantidadeMarca As Decimal
        Dim dPrecoTotalMarca As Decimal
        Dim dCustoTotalMarca As Decimal
        Dim dRoyaltiesProduto As Decimal
        Dim dRoyaltiesMarca As Decimal
        Dim dFreteMarca As Decimal
        Dim dFormaAParteMarca As Decimal

        '==================================
        Dim dFreteTonelada As Decimal

        Dim dLucroBruto As Decimal
        Dim dLucroOperacional As Decimal
        Dim dReceitaLiquida As Decimal
        Dim dComissao As Decimal

        Try

            dgvResultado.Rows.Clear()
            dv = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).DefaultView
            datMarcas = dv.ToTable(True, sFiltro)

            bFreteComposto = chkFrete_comporPreco.Checked
            If Not bFreteComposto Then
                dFreteTonelada = conversao.toDecimal(txtValorFrete.Text)
            End If

            For Each drMarca As DataRow In datMarcas.Rows
                sMarca = drMarca.Item("descMarca")
                dCustoTonelada = conversao.toDecimal(drMarca.Item("CustoMarca"))
                dPrecoTonelada = conversao.toDecimal(drMarca.Item("valorMarca"))

                'Seleciona no dataset todos os produtos com aquela marca e aquele custo
                drProdutosMarca = dsProposta.Tables(ctrProposta.eTabelas.PRODUTOS).Select("descMarca='" & sMarca & "'")
                If drProdutosMarca.Length > 0 Then
                    'Nos registros encontrados pela marca e custo, seleciona os que tem o mesmo preço
                    ' drProdutosMarca = drProdutosMarca.CopyToDataTable.Select("valorMarca = " & dPrecoTonelada)

                    For Each drLinhaProduto As DataRow In drProdutosMarca

                        dQuantidadeProduto = conversao.toDecimal(drLinhaProduto.Item(ctrProduto.eColunasProdutos.PESO_TOTAL))
                        dQuantidadeProduto = Decimal.Round(dQuantidadeProduto, 3)
                        dRoyaltiesProduto = conversao.toDecimal(drLinhaProduto.Item(ctrProduto.eColunasProdutos.VALOR_ROYALTIES))
                        sCodProduto = drLinhaProduto.Item(ctrProduto.eColunasProdutos.COD_PRODUTO)
                        sRegiao = drLinhaProduto.Item(ctrProduto.eColunasProdutos.COD_REGIAO)
                        drFormas = dsProposta.Tables(ctrProposta.eTabelas.FORMA).Select("codProduto='" & sCodProduto & "' and codRegiao='" & sRegiao & "'")

                        For Each drLinhaForma As DataRow In drFormas
                            If conversao.toBoolean(drLinhaForma.Item(ctrForma.eColunasForma.DILUIR)) Then
                                dFormaDiluidaProduto += drLinhaForma.Item(ctrForma.eColunasForma.VALOR_FORMA)
                                dFormaICMSProduto += objImposto.calcularImposto(dFormaDiluidaProduto, 0, Me.dICMS)
                            Else
                                dFormaAParteProduto += drLinhaForma.Item(ctrForma.eColunasForma.VALOR_FORMA)
                            End If
                        Next

                        'Se estiver marcado para o frete compor o preço, isso quer dizer que no preço que foi digitado por tonelada 
                        'já está imbutido o frete, se não, este valor deverá ser calculado no resultado da proposta
                        If bFreteComposto Then
                            dFreteProduto = drLinhaProduto.Item(ctrProduto.eColunasProdutos.VALOR_FRETE)
                            dValorFreteProduto = dFreteProduto
                        Else
                            dValorFreteProduto = dFreteTonelada * dQuantidadeProduto
                        End If

                        dPrecoCompostoProduto = dPrecoTonelada + dFreteTonelada + dFormaDiluidaProduto
                        dPrecoTotalProduto = dPrecoCompostoProduto * dQuantidadeProduto

                        dPrecoTotalMarca += dPrecoTotalProduto
                        dRoyaltiesMarca += dRoyaltiesProduto
                        dFreteMarca += dValorFreteProduto
                        dQuantidadeMarca += dQuantidadeProduto
                        dFormaAParteMarca += dFormaAParteProduto
                    Next

                End If

                dgvResultado.Rows.Add()
                'Preencher Marca
                'Calcular evolução custo
                dCustoTonelada = Me.objProposta.calcularEvolucaoCusto(dtpData.Value, dtpDataEntrega.Value, dCustoTonelada, conversao.toDecimal(txtEvolucaoCusto.Text))
                dCustoTonelada = Decimal.Round(dCustoTonelada, 2)

                dgvResultado.Item(eColResultado.MARCA, dgvResultado.Rows.Count - 1).Value = sMarca
                dQuantidadeMarca = Decimal.Round(dQuantidadeMarca, 3)
                dgvResultado.Item(eColResultado.QUANTIDADE, dgvResultado.Rows.Count - 1).Value = Formatacao.formatPeso(dQuantidadeMarca, 3)
                dgvResultado.Item(eColResultado.CUSTO_TONELADA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dCustoTonelada)
                dgvResultado.Item(eColResultado.PRECO_TONELADA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dPrecoTonelada)

                'dgvResultado.Item(eColResultado.FORMA_IMNUTIDA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dFormaAParte * dAjuste)
                dgvResultado.Item(eColResultado.PRECO_TOTAL, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor(dQuantidadeMarca * dPrecoTonelada)
                dCustoTotalMarca = dCustoTonelada * dQuantidadeMarca

                dLucroBruto = Me.objProposta.calcularLucroBruto(dPrecoTotalMarca, dFormaAParteMarca, dCustoTotalMarca, dICMS)
                dLucroBruto = Decimal.Round(dLucroBruto, 3)
                dReceitaLiquida = Me.objProposta.calcularReceitaLiquida(dPrecoTotalMarca, dFormaAParteMarca, dICMS)
                dComissao = Me.objProposta.calcularComissao(dPrecoTotalMarca, dFormaAParteMarca, conversao.toDecimal(Me.txtPercComissao.Text), dICMS)
                dLucroOperacional = Me.objProposta.calcularLucroOperacional(dPrecoTotalMarca, dFormaAParteMarca, dFreteMarca, dRoyaltiesMarca, dComissao, dCustoTotalMarca, dICMS)

                dgvResultado.Item(eColResultado.MARGEM_BRUTA, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor((dLucroBruto / dReceitaLiquida) * 100)
                dgvResultado.Item(eColResultado.MARGEM_CONTRIBUICAO, dgvResultado.Rows.Count - 1).Value = Formatacao.formatValor((dLucroOperacional / dReceitaLiquida) * 100)

            Next

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub


#End Region

#Region "Eventos"

    Private Sub tpResultado_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles tpResultado.Enter

        Me.calcularResultadoProposta()

    End Sub

    Private Sub btnCalcularEbtida_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalcularEbtida.Click
        Dim dEbtida_Vendas As Decimal
        Dim dEbtida_Adm As Decimal
        Dim dEbtida_Depreciacao As Decimal
        Dim dReceitaLiquida As Decimal
        Dim dValorCusto As Decimal

        Try

            dValorCusto = conversao.toDecimal(Me.txtTotalCusto.Text)
            dReceitaLiquida = conversao.toDecimal(Me.txtRecOperacionalLiq.Text)

            dEbtida_Vendas = conversao.toDecimal(txtEbtida_Vendas.Text)
            dEbtida_Adm = conversao.toDecimal(txtEbtida_Adm.Text)
            dEbtida_Depreciacao = conversao.toDecimal(txtEbtida_Depreciacao.Text)

            Me.txtEbtida_Valor.Text = Formatacao.formatValor(Me.objProposta.calcularEBTIDA(dEbtida_Vendas, dEbtida_Adm, dEbtida_Depreciacao, dReceitaLiquida, dValorCusto))

        Catch ex As Exception

            MsgBox(ex.Message, MsgBoxStyle.Critical, Application.ProductName)

        End Try

    End Sub

    Private Sub txtEvolucaoCusto_Leave(ByVal sender As Object, ByVal e As System.EventArgs) Handles txtEvolucaoCusto.Leave

        Me.txtEvolucaoCusto.Text = Formatacao.formatValor(conversao.toDecimal(Me.txtEvolucaoCusto.Text))
        Me.calcularResultadoProposta()

    End Sub

#End Region

#End Region

End Class
